简体   繁体   English

Enter按钮不提交表单(IE ONLY)ASP.NET

[英]Enter button does not submit form (IE ONLY) ASP.NET

I have a form with a textbox and a button. 我有一个带有文本框和按钮的表单。 IE is the only browser that will not submit the form when Enter is pressed (works in FF, Opera, Safari, Chrome, etc.). IE是唯一一个按下Enter键时不提交表单的浏览器(适用于FF,Opera,Safari,Chrome等)。 I found this javascript function to try to coax IE into behaving; 我发现这个javascript函数试图哄骗IE进行表现; but no avail: 但无济于事:

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
    }
}

Implementation: 执行:

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

Any advice? 有什么建议?

EDIT: This page on CodeProject outlines what Dillie was saying, and it works perfectly. 编辑: CodeProject上的这个页面概述了Dillie所说的内容,它完美无缺。

Just create a text input in a hidden div on the page. 只需在页面上的隐藏div中创建文本输入即可。 This will circumvent the IE bug. 这将绕过IE漏洞。

Example div: 示例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>

The other thing I have done in the past is wrap the form area in a Panel and set the DefaultButton attribute to the submit button you have. 我过去做的另一件事是将表单区域包装在Panel中,并将DefaultButton属性设置为您拥有的提交按钮。 This effectively maps the enter key to the submission as long as you have a form element in focus in the panel area. 只要在面板区域中有一个焦点的表单元素,这就可以有效地将输入键映射到提交。

There is a good write up of this problem here, and a nice jquery based solution: 这里有一个很好的写这个问题,一个很好的基于jquery的解决方案:

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

// 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)"

Hide the button - not using display:none, but with the following styles: 隐藏按钮 - 不使用display:none,但使用以下样式:

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

If you do this, you won't need to add any other elements or hidden inputs. 如果这样做,您将不需要添加任何其他元素或隐藏的输入。

When using display:none , IE won't see the button and therefore won't be able to use it to submit the form. 使用display:none ,IE将无法看到该按钮,因此无法使用它来提交表单。 Instead, you could use z-index and absolute positioning to hide it under another element, eg with the style: 相反,您可以使用z-index和绝对定位将其隐藏在另一个元素下,例如使用样式:

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

Now it'll still be there, usable by IE, but hidden beneath another element. 现在它仍然存在,可以被IE使用,但隐藏在另一个元素之下。

This is due to a peculiarity in IE for single text field inputs. 这是由于IE对单个文本字段输入的特殊性。

A simple solution is to stop the page having a single text field by adding another hidden one. 一个简单的解决方案是通过添加另一个隐藏的页面来停止具有单个文本字段的页面。

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

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

Does it use a GET instead of a POST? 它使用GET而不是POST吗? Is the URL too long? 网址太长了吗? I've seen that... 我见过......

Basically, a form needs either a button, input type="submit" or an input type="image" to enable the builtin behaviour to submit a form on enter. 基本上,表单需要一个按钮,输入类型=“提交”或输入类型=“图像”,以使内置行为能够在输入时提交表单。 You shouldn't need a javascript to submit it. 你不应该需要一个javascript来提交它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM