IE需要2个文本框才能提交按钮?

时间:2009-06-12 11:24:58

标签: internet-explorer

我遇到了这个奇怪的问题,我不确定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>

4 个答案:

答案 0 :(得分:2)

如果我是你,我会编写表单,这样您就不必担心按钮上的点击处理程序(毕竟,它没有被点击),并且当表单是时,也忽略按钮的值提交(从不理解为什么按钮具有提交的值)。

作为对您的问题的评论指出,ENTER按钮的行为没有很好地标准化,您可以在不同的浏览器中获得不同的行为,因此即使您认为您的页面正常工作,它也可能不适合您的所有用户。此外,还有其他方式可以提交表格:

  • 输入密钥
  • 提交按钮
  • Javascript form.submit()
  • <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按钮。