Skip to content

Web Forms,体系完整、灵活高效、高度一致的 Web 表单方案。

Notifications You must be signed in to change notification settings

webforms/webforms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WebForms


Build Status Coverage Status

语义化 Web 表单,提供体系完整、灵活高效、高度一致的 Web 表单方案。

设计思想

  • 通过简单、语义化语法来定义表单,简化 Web 表单。
  • 体系化、完整、一致的表单定义。
    • 校验、富 UI 控件等只是表单的一部分。
    • 用户需要的是一个完整的表单,不会有只需要校验或其他某一小部分的场景。
    • 开发、设计、定义的一致性。
    • 用户使用的交互、反馈一致性。
  • 灵活、完整定义表单交互反馈的控制权。

使用说明

<form id="loginForm">
  UserName: <input type="text" name="username" required /> * 可以是邮箱或手机号。
  PassWord: <input type="password" name="pwd" required minlength="6" maxlength="30" /> *
</form>
var loginForm = new WebForms(form, {
  rules: {
    "username": function(field){
      return this.RULES.email.test(field.value) ||
             this.RULES.mobile.test(field.value);
    }
  }
})

WebForms 的构造函数中,参数列表如下:

  1. 第一个参数是用于指定表单。
    • 可以是表单的 ID。(可选添加 # 前缀)

      new WebForms("formId");
      new WebForms("#formId");
    • 或者是 HTMLFormElement 元素。

      new WebForms(document.getElementById("formId"));
  2. 第二个参数用于指定表单的各个可选选项,该参数本身可选。
    • rules: Object, 自定义的表单项校验函数。
      • 前缀为 # 的 key 表示是针对特定 id 的表单项的定义。
      • 其他的 key 表示是针对特定 name 的表单项的定义。

HTML API

参考 HTML5 的表单定义,并做了少许补充。

form[novalidate]

指定当前表单不进行输入合法性校验。

field[required]

声明表单项为必填项。

注:field 为表单项统称,包括 input, select, textarea, button 等。下同。

field[maxlength=number]

声明表单项的可填写最大长度为 number

field[minlength=number]

声明表单项的填写最小长度为 number

field[max]

指定表单项的最大值。用户可以输入小于或等于这个值的内容。

使用的 field 包括数值和日期型表单项,如:input[type=number], input[type=date], ...

field[min]

指定表单项的最小值。用户可以输入大于或等于这个值的内容。

使用的 field 包括数值和日期型表单项。

field[pattern]

指定表单项的校验规则表达式。

pattern 的值是正则表达式,用户输入的内容必须匹配这个表达式。

field[validated]

异步校验的表单项需要设置这个属性,默认值留空即可。

field[formnovalidate]

指定忽略校验的表单项。

input[type]

指定表单项的类型,支持的类型包括:

  • text: 文本输入框。
  • radio: 单选框。
  • checkbox: 复选框。
  • password: 密码框。
  • hidden: 隐藏表单项。
  • search: 搜索框。
  • file: 文件选择输入框。
  • number: 数值输入框。
  • range: 范围选择、输入框。
  • date: 日期输入框。
  • time: 时间输入框。
  • datetime: 日期时间输入框。
  • month: 月份输入框。
  • week: 星期(周)输入框。
  • datetime-local: 本地日期时间输入框。
  • url: 网址输入框。
  • email: 邮箱地址输入框。
  • tel: 联系电话输入框。
  • color: 色彩输入框。

input[type=file][accept]

指定文件输入框限制的文件类型。

如:

<input type="file" accept="image/jpg,.png,video/*" />

accept 属性支持 MIME-TYPE 和后缀设定。更多参考:

form[validationRealtime]

定义整个表单是否使用实时校验。

默认不添加 validationRealtime 属性时,整个表单默认不进行实时校验。

field[validationRealtime]

定义单个表单项是否使用实时校验。添加 validationRealtime 属性默认为使用实时校验, 除非 field[validationRealtime=nonrealtime]

JavaScript API

on(String event, Function handler)

绑定事件,在对应事件触发时,执行 handler 函数。

支持的事件请参考 Events 部分。

each(Function handler)

遍历整个表单的所有表单项。

new WebForms("#formId").each(function(field){
  switch(field.name){
  case "username":
    this.RULE.email.test(field.value);
    break;
  }
  // ...
});

String queryString()

根据用户在表单中的输入值,返回整个表单的查询字符串。

Events

WebForms 提供了完整的事件模型,通过监听各种事件就可以几乎所有的表单交互动作。

  • 通过 WebForms 的实例的 on 方法即可绑定事件监听。
  • on 方法的处理函数 handler 中,提供了对应表单项的常用信息,包括:
    • field.name: 表单项名称,即对应的 name 属性,如果没有 name 属性则为 null
    • field.id: 表单项 ID,即对应的 ID 属性,如果没有 ID 则为 null
    • field.type: 表单项的类型,即 input 的 type 属性、textareaselect-oneselect-multiple
    • field.value: 表单项当前的值。
    • field.element: 表单项本身的 HTMLElement。

valid

单个表单项通过校验时触发 valid 事件。

var WebForms = require("WebForms");

var webforms = new WebForms("#formId");
webforms.on("valid", function(field){
  switch(field.name){
  case "username":
    //...
    break;
  }
});

invalid

单个表达项未通过校验时触发 invalid 事件。

change

单个表单项发生变更时触发 change 事件。

focus

单个表单项获得焦点时触发 focus 事件。

blur

单个表单项失去焦点时触发 blur 事件。

mouseover

鼠标进入单个表单项时触发 mouseover 事件。

mouseout

鼠标离开单个表单项时触发 mouseout 事件。

error

WebForms 出现异常时触发 error 事件。

常见异常包括:

  • 尝试 focus 到第一个未通过校验的表单项失败(由于其处于隐藏状态)

validate:complete

整个表单校验完成后触发 complete 事件。

注:针对整个表单的事件,参数上下文与单个表单项不同,如下:

webforms.on("validate:complete", function(certified){
    console.log(certified ? "passed": "failed")
});

submit

表单校验通过,可以提交表单时触发 submit 事件。

绑定 submit 事件的处理函数中,返回 false 可以取消表单提交。 希望使用异步方式提交表单时可以使用这种方式。

webforms.on("submit", function(form){
  jQuery.ajax({
    url: form.action,
    data: form.queryString(),
    success: function(){}
  });
  return false;
});

TODO

  • 默认的几种验证反馈
  • 日期相关整理,或切换到 moment.js
  • placeholder
  • autofocus
  • replicable
  • calendar
  • range

About

Web Forms,体系完整、灵活高效、高度一致的 Web 表单方案。

Resources

Stars

Watchers

Forks

Packages

No packages published