最近在用Polymer加强form,使其支持表单的异步提交,但发现明明订阅了onsubmit和submit事件,却怎么也触发不了。下面咱们将一一道来。html
input[type=text] input[type=password] input[type=email] input[type=url] input[type=tel] input[type=number] input[type=search]
示例:html5
<form> <label for="name"></label> <input type="text" id="name" name="name"> <select id="sex" name="sex"> <option value="0">male</option> <option value="1">female</option> </select> </form>
input[type=submit]
子元素,或在表单外添加一个input[type=submit form=表单ID]
的元素,那么当上述元素获得焦点,按回车键,便可发起表单提交。<form> <label for="name"></label> <input type="text" id="name" name="name"> <label for="age"></label> <input type="number" id="age" name="age" value="0"> <input type="submit" value="submit"> </form>
将input[type=submit]
换成button
效果同样,IE下button
的type属性默认为button,其余浏览器(W3C标准)则是submit。
所以使用button时记得显式设置type属性值。浏览器
submit
方法。<form> <label for="name"></label> <input type="text" id="name" name="name"> <label for="age"></label> <input type="number" id="age" name="age" value="0"> <input type="button" value="submit"> </form> <script> var btn = document.querySelector('input[type="button"]') , form = document.querySelector('form') btn.addEventListener('click', function(e){ form.submit() }) </script>
var form = document.querySelector('form') form.fireEvent('onsubmit') form.submit()
示例2,DOM Level 2 Event异步
var e = document.createEvent('HTMLEvents') e.initEvent('submit', true, true) var form = document.querySelector('form') form.dispatchEvent(e)
示例3,DOM Level 3 Event函数
var e = new Event('submit') var form = document.querySelector('form') form.dispatchEvent(e)
示例4,jQueryui
$('form').trigger('submit')
HTML5对表单做了加强,其中最耀眼的可谓是合法性验证这一部分。首先咱们要明确一点的是,验证发生在与input等表单控件发生交互时(输入,点击,脚本修改其值等),而不是提交表单时才触发验证。而后再根据表单的配置和触发表单提交的方式,决定合法性验证的结果是否会阻止表单的提交。url
前提:form.novalidate为falsespa
<form> <input type="text" id="name" name="name" required> </form>
input#name
内容为空,则弹出非法内容警告,并阻止表单提交,不执行onsubmit和触发submit事件input#name
内容为空,不弹出非法内容警告,更不会阻止表单提交, 而是执行onsubmit和触发submit事件var e = new Event('submit') var form = document.querySelector('form') form.addEventListener('submit', function(e){ if (!form.novalidate && form.reportValidity()){ e.preventDefault() } }) form.dispatchEvent(e)
到这里对表单提交的方式和不一样方式引发后续不一样的效果有了解,但不稍微深刻上面引入关于合法性验证的内容内心老是发痒,下面咱们继续挖一挖吧!code
说到合法性验证,那必须说到一个新增的类型ValidityStateorm
@interface ValidityState @description input等表单控件经过validity属性获取 @prop {Boolean} valid - 内容是否符合规定 @prop {Boolean} valueMissing - 是否违反必填约束 @prop {Boolean} typeMismatch - 是否违反类型约束,如type=url|email|number等约束 @prop {Boolean} badInput - 是否为无效输入(没法转换为目标类型),如number输入了非数字 @prop {Boolean} tooLong - 是否超长 @prop {Boolean} tooShort - 是否长度不足 @prop {Boolean} stepMismatch - 是否符合step值设置的间隔 @prop {Boolean} rangeUnderflow - 是否小于最小值 @prop {Boolean} rangeOverflow - 是否大于最大值 @prop {Boolean} patternMismatch - 是否违反正则 @prop {Boolean} customError - 是否存在自定义错误信息
另外,表单控件还有其余属性、方法和事件是和合法性验证相关的
@prop {Boolean} willValidate - 是否启用合法性校验,只要设置了required等合法性验证属性即表示启用 @prop {String} validationMessage - 校验失败时的提示信息 @method setCustomValidity([{String} msg='']):undefined - 设置自定义错误信息,设置为undefined或空字符串,表示不存在自定义错误信息 @event invalid - 调用表单控件的checkValidity()或reportValidity(),非法时触发该事件 下面的方法,form和input等表单控件均拥有 @method checkValidity():Boolean - 检查是否符合校验约束,若不符合则触发相应的表单控件的invalid事件 form.addEventListener('submit', function(){ form.checkValidity() }) @method reportValidity():Boolean - 功能和checkValidity同样,但另外会以浏览器定义的方式显示提示信息
尊重原创,转载请注明来自:尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/6843528.html ^_^肥仔John