結論:
1 建議使用button[type=submit]來提交表單,而不是input;
2 只有單行文本控件時,回車會引發(fā)表單提交;
3 通過onsubmit事件可阻止表單提交
表單提交方式
input[type=submit] 或input[type=image]
<form method="get" action="./menut.html" id="form">
<input name='key'>
</input value='ok' type='submit'>
</form>
點擊提交按鈕可以提交
但是有個問題,如果給<input type="submit" name="btn"/>,提交后的結果為:

注意其中form的URL為./menut.html?key=123&btn=ok. 作為按鈕的input控件同時被當做一個表單輸入提交給了服務器。那么這個提交按鈕到手是交互控件還是數據控件呢?定位是有些不清晰。再加上它的樣式難以定制,不可作為其他標簽的容器,所以建議不要用input作為表單提交按鈕。
button[type=submit]
button的語義很明確,就是一個按鈕,不包含數據,作用就是用戶交互。但它也有type和value屬性。type的默認值是submit(IE下是button),所以點擊一個button會提交表單
<form method="get" action="">
<input name='key'>
<button type="submit">確定</button>
//最好還是加上type="submit",因為在IE瀏覽器中button的type默認是button,這意味著它只是一個按鈕而不會提交表單
</form>
不幸的是,button居然和input[type=submit]一樣,可以設置name和value.提交表單時,value也會被作為表單數據提交給服務器。相比較而言,還是建議用button作為交互用的按鈕,來提交表單。同時請注意設置type=submit來兼容IE
Enter鍵提交表單
Enter鍵是可以提交表單的!分為兩種情況:
1 單行文本控件(指的是type為text 而非textarea)回車可以提交表單。
2 只要表單中存在以下列出的任何一種按鈕,那么在相應表單控件擁有焦點的情況下,按回車鍵就可以提交表單(textarea 是個例外)。如果表單中沒有提交按鈕,按回車鍵就不會提交表單。
<input type="submit" value="ok">
<button type="submit"></button>
<input type="image" src="1.png">
通過form.submit()提交表單
<form method="get" action="">
<input name="name" type="text" >
<button type="button" value="ok" onclick="A()">
</form>
function A () {
if(){
return false;
}else {
document.forms[0].submit();
}
}
阻止表單提交
1 在表單中加上onsubmit = "return false;" 可以阻止表單提交。
<script>
function submitFun(){
//邏輯判斷
return true; //允許表單提交
//邏輯判斷
return false;//不允許表單提交
}
</script>
<form onsubmit="return submitFun();"> //注意此處不能寫成 onsubmit="submitFun();"否則將表單總是提交
</form>
form表單中陷阱
描述:最近遇到一次處理form數據的過濾,采用了button的onclick事件來檢查,發(fā)現return false后表單仍然提交了
仔細研究了下onclick, onsubmit, submit集合函數之間的關系和區(qū)別
<form action="#" method="POST" name="A" onsubmit="return X();">
<input type="text" value="" />
<input onclick="Y()" type="submit" value="提交"/>
</form>
自己寫了X(),Y()函數,我們會發(fā)現,這幾個函數的執(zhí)行順序
1) onclick: Y();
2) onsubmit: X();
3) submit();
也就是說:
只要onclick 未return false 那么就繼續(xù)執(zhí)行onsubmit
只要onsubmit未return false那么表單就被提交出去了
正確寫法
<input type="submit" onclick="return X()">
//X()返回false后,form的submit會被終止
錯誤寫法
<input type="submit" onclick="X()">
//X()返回false后,form的submit會繼續(xù)