目录
介绍alpine.js和iodine.js
iodine.js行动:一个基本示例
使用Alpine.js增强
对输入变化做出反应
服务器端错误处理
处理相互依存的输入
首页 web前端 css教程 使用Alpine.js和iodine.js轻巧验证

使用Alpine.js和iodine.js轻巧验证

Mar 28, 2025 am 10:17 AM

使用Alpine.js和iodine.js轻巧验证

现代用户期望在表单验证期间立即反馈。本文演示了两个轻巧的JavaScript库Alpine.js和iodine.js如何创建高度交互式的形式,其间接费用最小,非常适合小型静态站点或服务器渲染的应用程序(例如Rails或Laravel)。这些库避免了重型JavaScript构建工具的复杂性。

我们将通过逐步增强验证,展示Alpine.js和iodine.js的API。最终表格提供了无效输入的即时反馈。

介绍alpine.js和iodine.js

Alpine.js是CDN托管的库,不需要构建步骤或依赖项。它的简洁文档和小尺寸(8.36 kb缩小和GZPIESP)使其效率非常高。它被描述为具有类似Vue的模板的JQuery/Vanilla JavaScript替换,而不是较大框架的竞争对手。

iodine.js是一个微型表单验证库,旨在与任何前端框架轻松集成。它通过每个输入字段允许多个规则并提供明显的错误消息来简化验证。

iodine.js行动:一个基本示例

这是使用iodine.js的基本客户端验证示例,该示例通过CDN获取:

 // ...(iodine.js cdn链接将转到这里)...
登录后复制

或者,使用Skypack:

从“ https://cdn.skypack.dev/@kingshott/iodine”进口Kingshottiodine;
登录后复制

从Skypack导入时,请记住使用kingshottIodine 。碘is方法检查输入有效性针对指定的规则。否则,它返回到有效输入或错误字符串的true

我们将使用HTML数据属性来存储每个输入的验证规则:

<input type="text" name="username" data-rules='["required", "minLength:5"]'>
登录后复制

香草JavaScript处理验证:

令form = document.getElementById(“ form”);
令输入= [... form.queryselectorall(“输入[数据规则)”)];

功能onsubmit(event){
  inputs.map((输入)=> {
    if(iodine.is(input.value,json.parse(input.dataset.rules))!== true){
      event.preventDefault();
      input.classlist.add(“无效”);
    }
  });
}
Form.AddeventListener(“提交”,OnSubmit);
登录后复制

这个基本示例缺乏用户友好性。它没有提供错误消息,也不会动态更新。

使用Alpine.js增强

Alpine.js改善了用户体验。我们将验证模糊或输入更改,提供即时反馈而不会中断输入。通过CDN包括Alpine.js:

<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v3.x.x/dist/alpine.min.js" defer></script>
登录后复制

或者,通过Skypack:

从“ https://cdn.skypack.dev/alpinejs”导入alpinejs;
登录后复制

我们将使用x-data管理Alpine.js组件中的输入状态(模糊状态和错误消息)。一个函数定义了组件数据:

 alpine.data(“形式”,表格);
Alpine.start();

功能表格(){
  返回 {
    用户名:{errormessage:'',模糊:false},
    电子邮件:{errormessage:'',模糊:false},
    密码:{errormessage:'',模糊:false},
    passwordConf:{errormessage:'',模糊:false},
    // ...(函数将在稍后添加)...
  };
}
登录后复制

x-bind:class有条件地添加“无效”类:

<input type="text" name="username" x-bind:class="{ 'invalid': username.errorMessage && username.blurred }" ...>
登录后复制

对输入变化做出反应

事件听众更新组件的状态:

 // ...在“形式”功能中...
模糊:功能(event){
  令ele = event.target;
  这个[ele.name] .blurred = true;
  令规则= json.parse(ele.dataset.rules);
  此[ele.name] .errormessage = this.getErrormessage(ele.value,ulue);
},,
输入:功能(事件){
  令ele = event.target;
  令规则= json.parse(ele.dataset.rules);
  此[ele.name] .errormessage = this.getErrormessage(ele.value,ulue);
},,
geterrormessage:函数(值,规则){
  令Isvalid = iodine.is(value,ulues);
  如果(iSvalid!== true){
    返回iodine.geterrormessage(Isvalid);
  }
  返回 '​​';
},,
// ...
登录后复制

错误消息是使用x-showx-text显示的:

<p x-show="username.errorMessage && username.blurred" x-text="username.errorMessage"></p>
登录后复制

@submit事件处理程序(在高山组件中)处理表单提交:

提交:功能(事件){
  让输入= [...this。$ el.querySelectorall(“输入[数据规则)”);
  inputs.map((输入)=> {
    if(iodine.is(input.value,json.parse(input.dataset.rules))!== true){
      event.preventDefault();
    }
  });
}
登录后复制

服务器端错误处理

要处理服务器端错误,我们将将它们存储在data-server-errors属性中,并使用x-init填充组件的状态:

<input type="text" name="username" data-server-errors='["Username already exists"]' ...>
登录后复制

高山组件中的init功能将处理以下操作:

 init:function(){
  this.InputElements = [...this。$ el.querySelectorall(“输入[数据符号]”)];
  this.initdomdata();
},,
initdomData:function(){
  this.inputelements.map((Ele)=> {
    这个[ele.name] = {
      服务器:
      模糊:错误
    };
  });
}
登录后复制

更新了getErrorMessage功能以确定服务器错误:

 getErrormessage:功能(ele){
  if(this [ele.name] .servererrors.length> 0){
    返回此[Ele.name] .Servererrors [0];
  }
  // ...(其余函数在很大程度上保持不变)...
}
登录后复制

处理相互依存的输入

对于相互依存的输入(例如,密码确认),我们将在每个输入更改上更新所有错误消息。碘的addRule方法创建了一个自定义规则:

 iodine.Addrule(
  “匹配password”,
  value => value === document.getElementById(“密码”)。值
);
iodine.messages.MatchingPassword =“密码确认需要匹配密码”;
登录后复制

updateErrorMessages功能处理以下操作:

 updateerrormessages:function(){
  this.inputelements.map((Ele)=> {
    这个[ele.name] .errormessage = this.getErrormessage(ele);
  });
},,
登录后复制

getErrorMessage功能被完善,仅在输入模糊时返回消息:

 getErrormessage:功能(ele){
  // ...(服务器错误检查)...
  const error = iodine.is(ele.value,json.parse(ele.dataset.rules));
  if(error!== true && this [ele.name] .blurred){
    返回iodine.geterrormessage(错误);
  }
  返回 ””;
}
登录后复制

事件侦听器使用focusout而不是blur移动到父元素元素:

登录后复制
...

最后,为视觉反馈添加了淡入淡出的过渡:

<p x-show="username.errorMessage" x-text="username.errorMessage" x-transition:enter=""></p>
登录后复制

这导致了一种反应性,可重复使用和有效的形式验证解决方案。提供的form函数可以通过相应地配置HTML属性来重复使用多种形式。

以上是使用Alpine.js和iodine.js轻巧验证的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1277
29
C# 教程
1257
24
静态表单提供商的比较 静态表单提供商的比较 Apr 16, 2025 am 11:20 AM

让我们尝试在这里造成一个术语:“静态表单提供商”。你带上html

使Sass更快的概念证明 使Sass更快的概念证明 Apr 16, 2025 am 10:38 AM

在一个新项目开始时,Sass汇编发生在眼睛的眨眼中。感觉很棒,尤其是当它与browsersync配对时,它重新加载

每周平台新闻:HTML加载属性,主要的ARIA规格以及从iframe转移到Shadow dom 每周平台新闻:HTML加载属性,主要的ARIA规格以及从iframe转移到Shadow dom Apr 17, 2025 am 10:55 AM

在本周的平台新闻综述中,Chrome引入了一个用于加载的新属性,Web开发人员的可访问性规范以及BBC Move

带有HTML对话框元素的一些动手 带有HTML对话框元素的一些动手 Apr 16, 2025 am 11:33 AM

这是我第一次查看HTML元素。我已经意识到了一段时间,但是尚未将其旋转。它很酷,

纸张形式 纸张形式 Apr 16, 2025 am 11:24 AM

购买或建造是技术的经典辩论。自己构建东西可能会感觉更便宜,因为您的信用卡账单上没有订单项,但是

'订阅播客”链接应在哪里? '订阅播客”链接应在哪里? Apr 16, 2025 pm 12:04 PM

有一段时间,iTunes是播客中的大狗,因此,如果您将“订阅播客”链接到喜欢:

托管您自己的非JavaScript分析的选项 托管您自己的非JavaScript分析的选项 Apr 15, 2025 am 11:09 AM

有很多分析平台可帮助您跟踪网站上的访问者和使用数据。也许最著名的是Google Analytics(广泛使用)

See all articles