关于text文本框 按回车键 何种情况下 submit-------- 从一个bugfix 问题中想到

关于text文本框 按回车键 何种情况下 submit-------- 从一个bugfix 问题中想到

            接到一个问题,大概描述如下:页面有一text文本框,有一submit类型的按钮,输入内容后,按回车页面只是刷新一下,但是没有执行创建操作。而且文件夹名有如下限制:不能和之前创建文件夹同名,且非空。jsp中的内容简化为如下: 

<form> <tr>
 <td><input type="text" id="filename" /> </td>
<td><input type="submit" onclick="return addFile();"  id="sub"/> </td>
</tr> </form>


        其中addFile()函数会有上面提及到限制判断,并且会返回boolean类型,当然符合条件时就返回true,不符合就返回false。理所当然当输入内容后点击submit按钮会正常执行相关操作而且会正常执行限制判断。可是奇怪的是,在IE下 在text框输入内容后直接按回车确不能执行相关操作,只是页面刷新了一下, 但是在FIREFOX下 按回车却能正常执行操作和判断。 之前第一时间就是想到应该在text文本框中加一个onkeydown的事件enter_file(),enter_file函数是当按下回车时就执行,并且函数中应该有这句代码 document.getElementById('sub').click(); 就是说当回车时就执行submit按钮的click操作。 貌似应该会正常执行操作的吧,可是又一奇怪问题出现了,就是在IE下,在文本框中输入 a 后(假设之前没有文件名为a的文件),然后快速按2下(更多下也可以),结果会跳过“不能创建重复文件名”的判断,创建出2个相同名字a 的文件夹,而且例如输入同名文件名后,弹出框会一闪而过,不会等点击确认后才退出弹出框,但是在FIREFOX下却是正常执行,也不会出现一闪而过的现象,就是快速按几下也只是创建一个文件夹a。 之后百思不得其解,试过一些方法,比如把submit类型改为button类型,把onkeydown事件换成onkeypress或者onkeyup ,结果还是出现IE下快速按回车 创建2个同名文件夹,还是出现一闪而过的现象。
       初步判断可能是ie和ff在text框按回车的响应不同,最后上网搜了一下,找到一个帖子 名为求解一个关于回车的问题 http://topic.csdn.net/t/20061128/14/5191186.html ,具体内容到那个帖子看看。抽取其中值得注意的地方如下:
   IE:       
  1.   只有一个text框时,(不管有没有submit),直接触发onsubmit   (form标签的一事件属性)
  2.   有多个text框时,触发submit上的onclick,其默认行为为触发onsubmit。  

相对来说,ff的行为最复杂。       
  1.   有submit或button时,触发submit或button的onclick,然后该onclick的默认行为会触发onsubmit。  
  2.   没有submit或button时,  
  2.1   只有一个text框时,触发onsubmit;  
  2.2   有多个text框时,不触发onsubmit。  

因为看到当只有一个text框时,直接触发onsubmit,就联想到要在form标签中加上onsubmit事件,于是把上面的代码改为如下:
<form onsubmit="return addFile()"> <tr>
 <td><input type="text" id="filename" /> </td>
<td><input type="submit" id="sub"/> </td>
</tr> </form>
结果在IE下终于能成功操作,即是快速按几下也只是创建一个文件夹,并且不在出现一闪而过的现象。 因此很多时候在IE下可能出现奇怪问题,换作FF下就没问题了,Firefox支持JavaScript是正宗的。另外用firefox的插件 firedebug 来调试 javascript 程序 简直太爽了。




你可能感兴趣的:(关于text文本框 按回车键 何种情况下 submit-------- 从一个bugfix 问题中想到)