一个列表界面只有一个输入框查询条件,当首次进入在输入框中输入汉字后,按回车键发现输入框中汉字变成乱码!本觉得一个很简单不过的问题,结果却花了很久才找到缘由(听说是浏览器问题),按回车后执行了两次查询。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"