當form表單中只有一個input時按回車鍵將會自動將表單提交

一個列表界面只有一個輸入框查詢條件,當首次進入在輸入框中輸入漢字後,按回車鍵發現輸入框中漢字變成亂碼!本覺得一個很簡單不過的問題,結果卻花了很久才找到緣由(聽說是瀏覽器問題),按回車後執行了兩次查詢。javascript

一、未修改前代碼:java

<form id="ff" name="ff"  method="post">瀏覽器

<input type="text" id="userName" name="userName" size="12" maxlength='30' value="${(data.userName)!''}" onKeypress= "javascript:if(event.keyCode==13) do_postAuditList_search();"/>
網絡

</form>post

二、修改後代碼:spa

<form id="ff" name="ff"  method="post">code

<input type="text" id="userName" name="userName" size="12" maxlength='30' value="${(data.userName)!''}" onKeypress= "javascript:if(event.keyCode==13) do_postAuditList_search();"/>
orm

 <!--解決form表單在只有一個input輸入框時回車會自動提交表單-->
               <input style='display:none' />
事件

</form>ip

即:添加一個<input type='text' style='display:none'/>不顯示輸入框,而後回車以後也不會提交。

補允:

******後經網絡搜索,發現一大牛寫的,更全面,在此引用******

出現自動提交的狀況,有兩種可能:
一是編寫了javascript代碼,當用戶點按Enter鍵時,經過js事件偵聽機制觸發表單的提交。
二是利用了瀏覽器的默認行爲(至少發現ie是這樣的)。瀏覽器在解析網頁的時候,有許多默認的行爲,例如若是一個頁面上有表單和一個提交按鈕,那麼打開頁面時,焦點會自動落在這個提交按鈕上面。一樣若是一個表單中只有一個單行文本輸入域(text),那麼在這個輸入域中按Enter鍵時,瀏覽器會自動提交該表單。
咱們對於第一種狀況通常都知道並且很容易理解,可是對於第二種瀏覽器的默認行爲,可能知道這一點的人就比較少了,下面我具體看一下瀏覽器(至少ie如此)在表單提交上的默認行爲。
若是表單中含有一個單行文本輸入域,那麼不管含有多少其餘類型的表單組件,那麼在該輸入域中點擊Enter時,表單會自動提交。例以下面的代碼:
<form action="" method="post"
<input type="text"
name="sdfsdf"/
<textarea</textarea
<input type="checkbox"sdfsdf
<input type="hidden"name="aa"/</form
若是表單中含有兩個或多個單行文本輸入域,那麼不管是否含有其餘類型的表單組件,按Enter鍵時不會自動提交,例如:
<form action="" method="post"
<input type="text"
name="sdfsdf"/
<input type="text"
name="sddf"/</form
辦法很簡單,咱們上面舉的例子中已經有了,只要再添加一個文本輸入框就能夠了,可能你會說,爲了避免自動提交就要增長一個沒有用的輸入框,並且中含有兩個輸入框最終用戶會接受嗎?其實能夠解決,你能夠將那個新添加的輸入框經過style隱藏便可,例如:
<form action="" method="post"
<input type="text" name="notautosubmit"
style="display:none"/
<input type="text"
name="username"/</form
還有一個方法能夠綁定button按鈕 enter觸發事件:
document.onkeypress = function(){
if(event.keyCode == 13) {search();returnfalse;}}其中search方法是onclick事件:<form name="searchfrom"
相關文章
相關標籤/搜索