详解基于原生JS验证表单组件xy-form


Posted in Javascript onAugust 20, 2019

原生form表单

form 表单元素大家可能都用到过,除了可以提交表单外,还有一些内置的表单校验,比如 requireminlengthmaxlength ,还有各种类型的 input ,比如 type=email 可以校验是否是邮箱类型,如果不满足还可以使用 pattern 进行正则校验。

原生的表单验证大概如下

详解基于原生JS验证表单组件xy-form

虽然丑陋,功能却很强大,基本可以满足一般的需求,不过ui终究过于原生,而且也不方便自定义,所以很多情况下这种默认的表单验证并不使用。

下面来看看 xy-form 下的效果

详解基于原生JS验证表单组件xy-form

结构基本和原生类似,也不需要额外的 js 逻辑

可以说丑小鸭立马变成白天鹅了。

xy-form

xy-formxy-ui 新增了一类组件,主要用于表单提交和表单验证,完全可以取代原生 form 表单,下面简单介绍一下主要属性和方法,建议阅读在线文档 ,可以实时交互。

使用方式

使用方式很简单

npm

npm i xy-ui

cdn

<script type="module" src="https://unpkg.com/xy-ui/components/xy-form.js"></script>

<!--或者-->

<script type="module">
  import 'https://unpkg.com/xy-ui/components/xy-form.js'
</script>

或者直接从 github 拷贝源码。

<script type="module" src='./node_modules/xy-ui/components/xy-form.js'></script>
<!--或者-->
<script type="module">
  import './node_modules/xy-ui/components/xy-form.js';
</script>

使用

<xy-form>
  ...
</xy-form>

表单默认行为

属性

xy-form 内置了以下属性,基于 html5 规范。

这里的默认行为指的是,点击 submit 按钮或者回车,表单首先对表单元素进行格式校验,如果有误则会将有误的地方标识出来,全部正确后才能进行提交。

  • 表单地址 action

值为 URL ,规定向何处发送表单数据。

回车键会触发表单。

  • 请求方式 method

规定请求方式,默认为 get ,可选 post

  • 验证 novalidate

如果使用该属性,则提交表单时不进行验证。

方法

  • 提交 submit

当表单内包含 htmltype="submit" 的按钮时,点击该按钮可以触发表单提交。

可通过 form.submit() 主动触发。

  • 清空 reset

当表单内包含 htmltype="reset" 的按钮时,点击该按钮可以清空表单。

可通过 form.reset() 主动触发。

下面是一个最账号密码的登录框

<xy-form action="/login" method="post">
  <xy-form-item legend="user">
    <xy-input name="user" required placeholder="user"></xy-input>
  </xy-form-item>
  <xy-form-item legend="password">
    <xy-input name="password" required type="password" placeholder="password" minlength="6"></xy-input>
  </xy-form-item>
  <xy-form-item>
    <xy-button type="primary" htmltype="submit">login</xy-button>
    <xy-button htmltype="reset">reset</xy-button>
  </xy-form-item>
</xy-form>

渲染如下

详解基于原生JS验证表单组件xy-form

首先输入框均设置了 required 属性,表示必填项,如果不输入在 submit 时会提示以下信息

详解基于原生JS验证表单组件xy-form

其次,密码框规定了 minlength 属性,表示最小字符长度,如果不满足格式,会提示以下信息

详解基于原生JS验证表单组件xy-form

当全部满足要求才能进行提交,可在控制台查看提交的表单数据,格式为formData,可转换json。

详解基于原生JS验证表单组件xy-form

自定义表单

自定义表单提交

当表单带有 action 属性时,回车键可以触发表单提交,如果包含 htmltype="submit" 的按钮时,点击该按钮可以触发表单提交。

如果想手动通过 ajax 提交,可以去除 action 属性,这样就不会触发默认表单提交效果了。

可通过 form.formdata 获取表单的值。

详解基于原生JS验证表单组件xy-form

sumbitBtn.onclick = function(){
  fetch('/login', {
    method: 'POST',
    body: form.formdata,
  })
  .then(function(data){
    //
  })
}

自定义表单验证

默认情况下,如果验证失败,表单则不会提交。

可以通过表单的 form.checkValidity() 方法手动校验所有表单元素,也可通过 form.validity 获取验证合法性。

详解基于原生JS验证表单组件xy-form

sumbitBtn.onclick = function(){
  if(form.checkValidity()){
    //全部验证通过
    XyDialog.success({
      title:"全部验证通过",
      content:JSON.stringify(form.formdata.json)
    })
  }
}

另外, xy-input 可以自定义校验规则,比如确认重复密码

pwdAgain.customValidity = {
  method:(el)=>{
    return el.value == pwd.value;
  },
  tips:'前后密码不一致'
}

详情可参考xy-input 的文档

其他

xy-form 并不是一个独立的组件,很多表单元素,如 xy-inputxy-checkboxxy-radio 等等均未提及,可参考 文档 ,有了这些组件,可以很轻松的完成表单校验,如文章开所示。

xy-form 是一个原生web组件,不限制于框架,可直接使用。如果想使用其他类似的组件,可关注xy-ui,汇集了其他各类常见交互组件,欢迎star~。

详解基于原生JS验证表单组件xy-form

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个简单的JavaScript数据缓存系统实现代码
Oct 24 Javascript
javascript中函数作为参数调用的方法
Feb 09 Javascript
javascript实现详细时间提醒信息效果的方法
Mar 11 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
Jul 01 Javascript
基于JavaScript实现添加到购物车效果附源码下载
Aug 22 Javascript
jQuery+ajax读取并解析XML文件的方法
Sep 09 Javascript
微信小程序 Flex布局详解
Oct 09 Javascript
js实现弹窗暗层效果
Jan 16 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
May 26 Javascript
JS重学系列之聊聊new操作符
Mar 04 Javascript
使用vue实现多规格选择实例(SKU)
Aug 23 Javascript
vue实现element表格里表头信息提示功能(推荐)
Nov 20 Javascript
详解微信小程序图片地扯转base64解决方案
Aug 18 #Javascript
wx-charts 微信小程序图表插件的具体使用
Aug 18 #Javascript
微信小程序canvas绘制圆角base64图片的实现
Aug 18 #Javascript
Node.js从字符串生成文件流的实现方法
Aug 18 #Javascript
微信公众号生成新浪短网址的实现(快速生成)
Aug 18 #Javascript
js 实现 list转换成tree的方法示例(数组到树)
Aug 18 #Javascript
详解ES6 Promise的生命周期和创建
Aug 18 #Javascript
You might like
新版PHP将向Java靠拢
2006/10/09 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
JQuery里选择超链接的实现代码
2011/05/22 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
Bootstrap实现翻页效果
2017/11/27 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
vue的for循环使用方法
2019/02/12 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
python实现查找所有程序的安装信息
2020/02/18 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
怎样比较两个类型为String的字符串
2016/08/17 面试题
Servlet如何得到客户端机器的信息
2014/10/17 面试题
四种会话跟踪技术
2015/05/20 面试题
2014年3.15团委活动总结
2014/03/16 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
毕业生自荐信范文
2015/03/05 职场文书
2015年推普周活动总结
2015/03/27 职场文书