form表單那些事

結論:
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"/>,提交后的結果為:


Paste_Image.png

注意其中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ù)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 表單基礎知識 在HTML中,表單是由 元素來表示的,而在JS中,表單對應的則是HTMLFormElement類型。...
    oWSQo閱讀 958評論 0 1
  • 今天想要講的東西比較雜亂,自己理了好久的思路感覺一直找不到一條線串聯(lián)起這些碎片化的知識。然后就想著那就先寫寫看吧,...
    Programmer客棧閱讀 2,142評論 0 9
  • 1.表單元素 編寫表單的三個步驟:構建表單,服務器端處理,配置表單 以披薩預定表單為例 構建完表單,需要服務器端提...
    hyt222閱讀 631評論 0 0
  • ¥開啟¥ 【iAPP實現進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,322評論 0 17
  • 本人做php的,最近發(fā)現JS真的是博大精深啊,比PHP難.在HTML中,表單是由form元素來表示的,但是在jav...
    linfree閱讀 2,331評論 3 17

友情鏈接更多精彩內容