click主要用於元素的點擊時的響應事件,而submit是指表單元素form的提交事件。
但是,當click加入到表單的提交按鈕時,事情似乎就有點復雜,總是忘記了。這兩天搜了下,又實踐了一下。
主要用到的代碼:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" CONTENT="text/html; charset=UTF-8"/> 5 <title>模板</title> 6 <style type="text/css"> 7 *{ 8 margin: 0; 9 padding: 0; 10 } 11 div.content{ 12 13 margin:0 auto; 14 text-align:center; 15 } 16 17 </style> 18 19 </head> 20 <body> 21 <div class="content"> 22 <form id="form1" onsubmit="ddsubmit();return false;" > 23 <input name="txt" type="text" value="dee" /> 24 <input name="sub" type="submit" onclick="return ddclick();" value="sub" /> 25 </form> 26 </div> 27 <script type="text/javascript"> 28 var form = document.getElementById("form1"); 29 var sub = form.sub; 30 function ddclick(){ 31 console.log("submit element click."); 32 // alert("dd"); 33 // return false; 34 } 35 function ddsubmit(){ 36 console.log("submit on"); 37 alert("da"); 38 } 39 </script> 40 </body> 41 </html>
主要有三點:
1.click和submit的順序問題
點擊提交按鈕時,一般先觸發click事件,然后再觸發submit事件。
這點倒是沒什么好糾結的,click是在元素界面上的事件,submit屬於表單控件上的事件。
onclick是元素在點擊的時候觸發的點擊處理函數,而onsubmit是表單“點擊”提交時,表單前的驗證處理函數。為什么說“點擊”提交呢?
2.響應事件的觸發后續問題
通常我們用到的是響應處理函數,用於處理事件發生時的數據處理。
這里主要說的是click的處理后續和submit的處理后續:click->click響應事件->submit響應事件->submit
click的處理事件完成后,該是輪到submit事件的處理以及處理后的submit.
而主要關注點在於,是否能夠在每個節點處設置些什么來停止后續節點執行?
我們在用onclick="method();"時,只是響應事件執行了method這個方法,而如果寫成onclick="return method();"則會將method的執行結果return。
關鍵在return,當return false的時候,onclick響應處理完成后,后續事件就不執行下去了;同樣的,在onsubmit上也寫同樣的return false 也是最終不會submit。
// 2.1 處理順序上好特別,直到寫的時候才發現,click響應是在click之后,submit則是在submit響應之前?
2.2似乎還可以在響應事件處理中,用 event.preventDefault(); //event 事件參數
3.submit的響應事件的不觸發
我們如果直接用javascript代碼來執行表單的提交的話(即 form.submit()),是不會觸發onsubmit事件的。
這里要順道提一下,我如果執行submit按鈕的click事件,是會在執行完click之后跟着執行submit(表述遵從2提到的觸發后續問題)。