最近在用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