带有单个文本字段的HTML表单+阻止Internet Explorer中的回发

Sud*_*lam 2 javascript internet-explorer autopostback javascript-events

我注意到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;
        }
Run Code Online (Sandbox Code Playgroud)

扼杀这不起作用.


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

<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;
        }
Run Code Online (Sandbox Code Playgroud)

我能够阻止回发.

任何人都可以确认这里到底发生了什么?

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

在提交时执行的JavaScript函数的结果o/p显示在单独div中的HTML文本区域中.

Sud*_*lam 8

找到解决此问题的方法.

我刚刚发现在IE中,如果在表单中只有一个文本字段和一个提交按钮,则按表单提交输入结果.但是,如果有多个文本框,IE不会在输入按下时自动回发表单,而是触发按钮的onclick事件.

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

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

这对我来说非常适合!!

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