【问题标题】:Enter button does not submit form (IE ONLY) ASP.NET输入按钮不提交表单(仅限 IE)ASP.NET
【发布时间】:2008-11-06 22:02:13
【问题描述】:

我有一个带有文本框和按钮的表单。 IE 是唯一在按下 Enter 时不会提交表单的浏览器(适用于 FF、Opera、Safari、Chrome 等)。我发现这个 javascript 函数试图哄骗 IE 行为;但无济于事:

function checkEnter(e){
    var characterCode
    if (e && e.which) {
        e = e
        characterCode = e.which
    } else {
        e = event
        characterCode = e.keyCode
    }
    if (characterCode == 13) {
        document.forms[0].submit()
        return false
    } else {
        return true
    }
}

实施:

searchbox.Attributes("OnKeyUp") = "checkEnter(event)"

有什么建议吗?

编辑: This page on CodeProject 概括了 Dillie 所说的内容,而且效果很好。

【问题讨论】:

  • 那么,您的表单根本没有按钮?
  • 对不起,它也有一个按钮。感谢您指出这一点。

标签: asp.net javascript internet-explorer textbox


【解决方案1】:

只需在页面上的隐藏 div 中创建一个文本输入。这将绕过 IE 错误。

示例 div:

    <!-- Fix for IE bug (One text input and submit, disables submit on pressing "Enter") -->
    <div style="display:none">
            <input type="text" name="hiddenText"/>
    </div>

【讨论】:

    【解决方案2】:

    我过去做的另一件事是将表单区域包装在面板中,并将 DefaultButton 属性设置为您拥有的提交按钮。只要您在面板区域中有一个表单元素处于焦点位置,这就会有效地将 enter 键映射到提交。

    【讨论】:

    • 不,它不会(回答我自己的问题)。这工作,谢谢! :D
    • 很高兴它成功了。一个很好的警告是,如果您在页面上有多个表单(比如搜索的各种选项),您可以在每个表单周围包裹一个面板,然后正确“映射”正确的提交按钮。
    • 此解决方案创建一个 javascript 函数。有没有办法解决这个问题,使其可以访问?
    【解决方案3】:

    这里有一个很好的关于这个问题的文章,以及一个很好的基于 jquery 的解决方案:

    http://www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

    【讨论】:

      【解决方案4】:
      // Use the following Javascript in your HTML view
      // put it somewhere between <head> and </head>
      
          <script language="JavaScript" type="text/javascript"><!--
          function KeyDownHandler(btn)
          {
            if (event.keyCode == 13)
            {
              event.returnValue=false;
              event.cancel = true;
              btn.click();
            }
          }
          // -->
          </script>
      
          // Put this in your TextBox(es) aka inside <asp:textbox ... >
          onkeydown="KeyDownHandler(ButtonID)"
      

      【讨论】:

      • 感谢您的输入,它会抛出一个可爱的“对象不支持此属性或方法”错误,但是:(
      【解决方案5】:

      当使用display:none 时,IE 将看不到按钮,因此无法使用它来提交表单。相反,您可以使用 z-index 和绝对定位将其隐藏在另一个元素下,例如与风格:

      position:absolute; bottom: -20px; left: -20px; z-index: -1;

      现在它仍然存在,可供 IE 使用,但隐藏在另一个元素之下。

      【讨论】:

        【解决方案6】:

        隐藏按钮 - 不使用 display:none,但使用以下样式:

        position: absolute; /* no longer takes up layout space */
        visibility: hidden; /* no longer clickable / visible */
        

        如果您这样做,则无需添加任何其他元素或隐藏输入。

        【讨论】:

          【解决方案7】:

          这是由于 IE 中单个文本字段输入的特殊性。

          一个简单的解决方案是通过添加另一个隐藏的文本字段来停止页面具有单个文本字段。

          <input type="text" name="hidden" style="visibility:hidden;display:none;" />
          

          看.. http://www.4guysfromrolla.com/articles/060805-1.aspx

          【讨论】:

            【解决方案8】:

            它是否使用 GET 而不是 POST?网址是否太长?我看过……

            【讨论】:

              【解决方案9】:

              基本上,表单需要一个按钮、输入类型=“提交”或输入类型=“图像”,以启用内置行为以在输入时提交表单。您不需要 javascript 来提交它。

              【讨论】: