javascript - 具有单个文本字段的 HTML 表单 + 防止在 Internet Explorer 中回发

标签 javascript internet-explorer dom-events autopostback

我注意到 IE 中有一个相当奇怪的行为。

我有一个带有单个输入文本字段和提交按钮的 HTML 表单

点击“提交”后,我需要执行执行必要操作的客户端 JavaScript 函数。

现在当我想阻止文本字段中的回发时(按下回车键)。

我添加了一个按键 JavaScript 函数,如下所示:

<input type=text onkeypress="return OnEnterKeyPress(event)" />

 function OnEnterKeyPress(event) {
            var keyNum = 0;
            if (window.event) // IE
            {
                keyNum = event.keyCode;
            }
            else if (event.which) // Netscape/Firefox/Opera
            {
                keyNum = event.which;
            }
            else return true;  
            if (keyNum == 13) // Enter Key pressed, then start search, else do nothing.
            {
                OnButtonClick();
                return false;
            }
            else
                return true;
        }

奇怪的是这不起作用。


但是如果我将文本字段传递给函数:

<input type=text onkeypress="return OnEnterKeyPress(this,event);" />

 function OnEnterKeyPress(thisForm,event) {
            var keyNum = 0;
            if (window.event) // IE
            {
                keyNum = event.keyCode;
            }
            else if (event.which) // Netscape/Firefox/Opera
            {
                keyNum = event.which;
            }
            else return true;  
            if (keyNum == 13) // Enter Key pressed, then start search, else do nothing.
            {
                OnButtonClick();
                return false;
            }
            else
                return true;
        }

我能够阻止回发。

谁能确认这里到底发生了什么?

HTML 表单只有一个文本框和一个提交按钮。

提交时执行的 JavaScript 函数的结果输出显示在单独 div 中的 HTML 文本区域中。

最佳答案

找到解决此问题的方法。

我刚刚发现在 IE 中,如果在一个表单中,只有一个文本字段和一个提交按钮,则按 enter 会导致表单提交。但是,如果有多个文本框,IE 不会在按下回车键时自动回传表单,而是触发按钮的 onclick 事件。

所以我在表单中引入了一个隐藏的文本字段,一切都神奇地工作了。 我什至不需要处理文本字段的 onkeypress 事件。

<Form>
    <input type="text" />
    <input type="text" style="display:none"/>
    <input type="submit" onClick="callPageMethod();return false;"/>
</Form>

这非常适合我!!

这在 FF 中不是问题,因为直接按 enter 会导致调用提交按钮的 onclick 事件。

关于javascript - 具有单个文本字段的 HTML 表单 + 防止在 Internet Explorer 中回发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/756466/

相关文章:

javascript - 在 Loopback.io 远程方法中访问入站 HTTP header

javascript - 预填写外部 HTML 表单?

javascript - 如何获取数组中每个id的最小值

javascript - 如何使用 JavaScript 从数组中减去特定值

javascript - 从数组中过滤数据

javascript - SharePoint 2013 日历 getSelector 在 IE 中未定义

jquery - <select> Jquery Click 在 IE7、IE8 和 Safari 中不起作用

java - Internet Explorer 如何检测 jre?

值更改时的Javascript文本框调用事件

javascript - 如何确定哪个元素收到了事件?