# TinyForm **Repository Path**: cynthiaterry/TinyForm ## Basic Information - **Project Name**: TinyForm - **Description**: 基于jQuery的WEB表单处理工具库,让表单操作更简单。 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 20 - **Created**: 2016-12-07 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TinyForm TinyForm 是一个基于jQuery的WEB表单处理工具。他根据传入的*选择器*或*DOM/jQuery*对象,创建表单实例,然后在这个范围内搜索带有*name*属性的表单控件。 >默认的选择器是**input[name]:not([type=button][type=submit][type=reset]), select[name], textarea[name]**,这项是写在文件*src/tinyform.core.js*里面的全局变量*CONTROL_SELECTOR*中。 ## 用法/Usage **html** ```
男的 女的
``` **js** ``` var form = TinyForm('#f1', { autoValidate: true, // 是否在输入控件失去焦点时自动验证,默认为false stopOnFail: false, // 是否在第一次验证失败时停止验证,默认为true storage: localStorage, // 使用的存储,可以设置 localStorage(默认)或sessionStorage autoload: true, // 是否在初始化时加载存储的数据,默认为false interval: 3000, // 自动保存表单数据到存储的间隔(毫秒),不设置或设置0表示不自动保存 afterValidate: function(e) { console.log('字段:' + e.field[0].attr('name')); console.log('值:' + e.value); console.log('结果:' + e.pass); console.log('消息:' + e.msg); }, beforeSubmit: function(ajaxOption) { var data = ajaxOption.data || {}; data.addition = 'xxxxxxxxxxxxxx-fuck'; if(data.gender) { if(data.gender == '0') { data.gender = '男的'; } else { data.gender = '女的'; } } } }); ``` ### 想看更多示例 ? 那就点 **[这里](http://hyjiacan.oschina.io/tinyform/)** 吧 ## 选项/Option **fieldSelector** String > 自定义的表单控件选择器,用于选择表单控件。注:一定要包含*[name]*,否则会导致表单功能的异常 **autoValidate** Boolean > 是否在输入控件失去焦点时自动验证输入,默认为*false* **stopOnFail** Boolean > 是否在第一个验证失败的时停止验证,默认为 *true* **afterValidate** Function( e: Object): Boolean > 验证后的回调函数,上下文this指向 *minifom* 对象。此回调在验证每个输入控件时都会调用 > **e** 回调事件参数,结构如下: ``` { result: Boolean, //表单验证是否通过 field: Array, //正在验证的控件的对象数组 value: String, //此控件的值 message: String // 验证未通过时的消息 } ``` > **return** 验证是否通过,可以通过修改这个返回值来改变验证结果。如果没有返回或返回*undefined*,那么保留原验证结果 **beforeSubmit** Function(ajaxOption: Object) > 异步提交表单前的回调函数,上下文this指向 *minifom* 对象。可以通过此函数改变提交的数据 > **ajaxOption** 异步请求的数据对象 **storage** Storage > 使用的存储,可以设置 *localStorage*(默认)或*sessionStorage*(当表单数据需要在浏览器关闭后就丢弃) **autoload** Boolean > 是否在初始化时加载存储的数据,默认为*false* **interval** Number > 自动保存表单数据到存储的间隔(毫秒),不设置或设置0表示不自动保存 ## 标签属性/Tag Attribute **data-rule** > 此输入控件的验证规则,支持以下值: - required 必填 - number 数字 - alpha 字母 - email 电子邮箱 - site 网址 - 留空 不验证 - 以*regex:*打头 自定义的正则表达式,如:regex: [0-7] - 以*length:*打头 验证输入长度,若只有一个值则表示最短长度;两个值表示长度范围 length: 6, 16; 两个值相等表示指定长度 **data-msg** > 此控件验证失败时的提示消息,若不指定则使用默认消息 当有相同*name*的控件时,只读取第一个控件的*data-rule*和data-msg* ## 实例属性/Property **context** > 表单的DOM上下文,这是一个指向实例化表单的DOM的jQuery对象,可以通过这个对象去操作表单表的DOM。 ``` // 查找表单内的按钮 form.context.find('input[type=button]'); ``` ## 方法/Method > 说明:除了获取数据类(包括验证)的函数,其它都会返回*miniform*的实例对象。 **getField(fieldName: String): Array** > 根据name属性获取控件 返回数组,因为可能存在同name情况 > **fieldName** 要获取的控件的name值,如果不指定这个属性,那么返回所有控件 > **return** 范围内所有name为指定值的控件数组或获取到的所有域对象,结构如下: ``` { username: [Object], // 用户名 gender: [Object, Object] // 男 女 } ``` 或 ``` [Object], // 用户名 [Object, Object] // 男 女 ``` **getData(fieldName: String): Object** > 获取输入控件的值。 > **fieldName** 要获取值的控件。控件的name名称,如果指定了此参数,则只获取name=此值的控件的值 > **return** 表单数据,结构如下: ``` { username: 'hyjiacan', gender: '0' } ``` > 注意:带有*multiple="multiple"属性的*select*,获取到的值为数组。 **setData(data: Any|Object, fieldName: String): Instance** > 设置控件的值 > **data** 表单数据,*field*不指定时结构与*getData*返回结构一致,缺少的项使用空值;指定时可以设置任何合适的类型 > **fieldName** 控件的name名称,如果指定了此参数,则只设置name=此值的控件的值 > **return** miniform实例 **reset(): Instance** > 重置表单的值(清空所有数据) > **return** miniform实例 **refresh(): Instance** > 重新获取所有控件和验证规则,适用于表单有动态改动时 > **return** miniform实例 **getRule(fieldName: String): Object** > 获取表单指定控件的验证规则或所有规则 > **fieldName** 件的name名称,不指定此值时获取所有规则 > **return** 获取单个控件规则时,返回结构如下: ``` { rule: /^.+$/, // 必填 msg: '不能为空' // 提示消息,通过标签的 *data-msg* 属性设置 } ``` > 获取多个控件规则时,结构如下: ``` { username:{ rule: /^.+$/, // 必填 msg: '不能为空' // 提示消息,通过标签的 *data-msg* 属性设置 } gender: { rule: false, // 没有验证规则 msg: '' } } ``` **validate(field: String|Array): Boolean|Object** > 通过标签属性*data-rule*指定的规则验证表单 > **fieldName** 指定要验证控件的name名称,不指定时验证所有控件 > **return** 验证通过时,返回*true*,未通过时返回失败详细信息,结构如下: ``` { username: false, gender: true } ``` **submit(option: Object)** > 异步提交表单 > **option** ajax选项,参数与*jQuery*的ajax选项相同,默认参数如下: ``` { url: 使用表单的action属性, type: 使用表单的method属性,如果没有则使用*post*, data: 使用*getData()*取到的表单数据,在此指定时,参数会附加到参数里面 } ``` **store(fn: Function)**: Object > 存储表单数据 > **fn** 存储前的回调函数,用于在存储前处理数据,这个函数有一个参数**data**,是表单的数据,修改后的数据通过**return**返回 > **return** 表单实例 **load(fill: Boolean, fn: Function)**: Object > 读取存储的表单数据,读取后会自动加载到表单 > **fill**是否在读取数据后自动将数据填充到表单中。注意:如果填充,动作发生在回调后 > **fn** 读取后的回调函数,用于在读取后处理数据,这个函数有一个参数**data**,是表单的数据,修改后的数据通过**return**返回 > **return** 从存储读取的数据(没有被回调处理过) **abandon()**: Object > 读取存储的表单数据,然后清除存储的数据 > **return** 从存储读取的数据 ## 属性/Property **context** 表单DOM上下文的jQuery对象,可以通过这个属性来访问DOM,如: ``` var defaultbtn = form.context.find('input[type=button].default'); ``` ## 扩展/Extend > TinyForm支持添加自定义功能扩展。 ``` (function($, TinyForm){ TinyForm.extend({ setup: function(){ // 这里写初始化的代码 }, refresh:function(){ // 这里写刷新表单时的代码,对需要缓存的数据进行刷新操作 }, method2:function(){ // 扩展方法 method2 }, methodn:function(){ // 扩展方法 methodn } }); })(jQuery, TinyForm); ``` 这时候,就可以直接调用 ``` form.method2(); form.methodn(); ```