我遇到了这个奇怪的问题,我不确定ASP.NET或IE 7是否应该受到责备......
这个想法是这样的:当我在表单上只有一个文本框和一个(提交)按钮时,然后在文本框内按ENTER键将只发布文本框的值。该按钮未提交,也不会触发Click even服务器端。
当我有两个文本框时,在任何一个文本框中点击ENTER也会发送按钮并触发Click事件。
WTF?
已添加:似乎是与IE相关的问题。这是一个简单的演示示例。注意地址栏并在第一个文本框中点击ENTER,然后在最后两个文本框中点击。
<html>
<body>
<form method="GET" action="" style="display: block">
<input type="text" id="ctl1" name="ctl1" value="">
<input type="submit" id="ctl2" name="ctl2" value="Klik">
</form>
<form method="GET" action="" style="display: block">
<input type="text" id="ctl1" name="ctl1" value="">
<input type="text" id="ctl3" name="ctl3" value="">
<input type="submit" id="ctl2" name="ctl2" value="Klik">
</form>
</body>
</html>
答案 0 :(得分:2)
如果我是你,我会编写表单,这样您就不必担心按钮上的点击处理程序(毕竟,它没有被点击),并且当表单是时,也忽略按钮的值提交(从不理解为什么按钮具有提交的值)。
作为对您的问题的评论指出,ENTER按钮的行为没有很好地标准化,您可以在不同的浏览器中获得不同的行为,因此即使您认为您的页面正常工作,它也可能不适合您的所有用户。此外,还有其他方式可以提交表格:
<input type="image">
为了健壮,我使用表单的onsubmit事件处理程序来执行提交表单时需要执行的任何操作,并且只使用onclick处理程序来执行在单击特定按钮时需要执行的操作(大多数将只需提交表格)。至于按钮值,我会使用<input type="hidden">
来存储我想要的多按钮场景的任何隐藏值,而不是打扰按钮的值。
但是,如果您无法使用这些选项,则可以添加隐藏的输入字段:
<input type="text" id="h1" name="h1" value="ignore" style="display: none">
这似乎解决了IE8上带有示例代码的问题。
答案 1 :(得分:0)
如果您使用的是ASP.NET,那么您应该只有一个表单。您还应该在要访问服务器端的任何控件上使用runat =“server”属性(包括表单iteself)。
好的,没有ASP.NET。它没有发布任何内容,因为你已经将GET作为表单中的方法了吗?
答案 2 :(得分:0)
html表单的默认行为是在任何控件具有焦点时提交表单。你需要做的是陷阱的ENTER键,然后按照你想要的方式处理表单提交。
之前我做过类似的事情(这个脚本有很多来源):
<script language="javascript">
function returnkey(evt) {
var evt = (evt) ? evt : ((event) ? event : null);
var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
if ((evt.keyCode == 13) && (node.type!="textarea")) {return false;} }
document.onkeypress = returnkey;
</script>
答案 3 :(得分:0)
如果您使用的是asp.net,我用来解决此问题的一个选项是将按钮设置为runat =“server”,将控件包装在面板中,并将面板的defaultbutton属性设置为ID按钮。