我们发现在一些页面上,在一个表单输入域中按Enter键时,表单会自动提交,但是有些表单却不会自动提交,这是为什么?
出现自动提交的情况,有两种可能:
一是编写了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>
对于浏览器的这种默认行为,我们可以好好利用为页面服务,例如我们的应用开发中,某个表单就只有一个单行文本输入域,但是我们不想在输入域中按Enter时自动提交该怎么办?
办法很简单,我们上面举的例子中已经有了,只要再添加一个文本输入框就可以了,可能你会说,为了不自动提交就要增加一个没有用的输入框,而且中含有两个输入框最终用户会接受吗?其实可以解决,你可以将那个新添加的输入框通过style隐藏即可,例如:
<form action="" method="post">
<input type="text" name="notautosubmit" style="display:none"/>
<input type="text" name="username"/>
</form>
按Enter键时如何避免表单自动提交
原创文章如转载,请注明:转载自悠悠博客 [ http://www.ajaxstu.com/ ]
相关文章:
- 各浏览器里默认的表单控件(图)(2007-11-19 1:30:10)
- onsubmit="return false;"(2007-10-25 4:0:0)
- <Label>标识的属性及事例(2007-10-5 8:53:12)
- 限制TextArea区的文字输入数量(2007-9-26 6:30:36)
- label标签的使用(2007-9-25 1:52:18)
- 表单元件在说什么?---分析表单元件的语义(2007-9-16 8:13:39)
- 标准化表单设计(form)实例(2007-9-14 11:9:4)
- 判断checkbox是否至少有选择一项(2007-9-12 8:42:1)
- HTML元素 - select(2007-9-6 6:16:28)
- HTML元素 - textarea(2007-8-21 2:27:35)
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
