天天看點

前端魔法堂:onsubmit和submit事件處理函數怎麼不生效呢?

 最近在用polymer增強form,使其支援表單的異步送出,但發現明明訂閱了onsubmit和submit事件,卻怎麼也觸發不了。下面我們将一一道來。

表單僅含一個以下的元素時,該元素得到焦點,按Enter鍵,即可發起表單送出。

示例:

表單含兩個或以上的上述元素時,在表單中添加一個<code>input[type=submit]</code>子元素,或在表單外添加一個<code>input[type=submit form=表單id]</code>的元素,那麼當上述元素得到焦點,按Enter鍵,即可發起表單送出。

通過調用表單元素的<code>submit</code>方法。

通過觸發表單的submit事件

示例1, ie 678:

示例2,dom level 2 event

示例3,dom level 3 event

示例4,jquery

方式1,方式2和方式4均可依次調用onsubmit函數和觸發submit事件,是以可以在onsubmit函數或submit事件處理函數中禁止執行預設行為來實作表單的異步送出;

方式3既不會調用onsubmit函數,也不會觸發submit事件。

 html5對表單作了增強,其中最耀眼的可謂是合法性驗證這一部分。首先我們要明确一點的是,驗證發生在與input等表單控件發生互動時(輸入,點選,腳本修改其值等),而不是送出表單時才觸發驗證。然後再根據表單的配置和觸發表單送出的方式,決定合法性驗證的結果是否會阻止表單的送出。

前提:form.novalidate為false

方式1和方式2,若<code>input#name</code>内容為空,則彈出非法内容警告,并阻止表單送出,不執行onsubmit和觸發submit事件

方式3,直接送出表單

方式4,若<code>input#name</code>内容為空,不彈出非法内容警告,更不會阻止表單送出, 而是執行onsubmit和觸發submit事件

是以要方式4實作與方式1,2的效果可以這樣處理

 到這裡對表單送出的方式和不同方式引起後續不同的效果有了解,但不稍微深入上面引入關于合法性驗證的内容心裡總是發癢,下面我們繼續挖一挖吧!

 說到合法性驗證,那必須說到一個新增的類型validitystate

另外,表單控件還有其他屬性、方法和事件是和合法性驗證相關的

繼續閱讀