一、問題描述
當用JS呼叫form的方法submit直接提交form的時候,submit事件不回應。為什麼?知道的請回覆。類比一下,我用input.select()做了測試,卻能回應select事件。這個原因先放一邊,我們來看看先怎麼把眼下的問題解決了。
不回應事件的程式碼範例:
實際運行,不會有alert出來。
雖然用submit方法來提交表單有違Unobtrustive Javascript的原則,但有時候不得不用,比如做搜尋提示(auto-complete)選中Item之後就需要用JS來提交搜尋表單。
二、問題分析
既然本身不回應事件,那隻有手動觸發這些事件了,確定手動觸發方案之前先回顧一下事件的註冊方式:
「原始」的註冊方式有兩種,看程式碼範例:
這樣的註冊事件,會為form增加了一個方法onsubmit。所以,可以透過直接執行這個方法,等於手動觸發了事件。 看程式碼範例:
這樣可以得到一個alert。
但是在現今「先進」的DOM2標準註冊方式以及IE的註冊方式attachEvent已經很常用。這些註冊方式,onsubmit方法是不存在的,如果使用form.onsubmit()會直接報錯。
三、解決方案
當然「先進」的註冊方式本身也提供了手工觸發事件的解決方案,只是要針對DOM2標準和IE寫不同的程序,另外這個程序,對「原始」的註冊方式也一樣有效。請看程式碼範例:
四、程式碼總結
這裡不再對各細節方法做說明,不熟悉的朋友請自行查閱相關資料。我們把整個程式碼串起來:
submit
鏁村€嬭窇涓嬩締鏈夊€嬪皬鍟忛