Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有单个文本字段的HTML表单+;防止Internet Explorer中的回发_Javascript_Internet Explorer_Javascript Events_Autopostback - Fatal编程技术网

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

Javascript 带有单个文本字段的HTML表单+;防止Internet Explorer中的回发,javascript,internet-explorer,javascript-events,autopostback,Javascript,Internet Explorer,Javascript Events,Autopostback,我注意到IE中有一种相当奇怪的行为 我有一个HTML表单,只有一个输入文本字段和一个提交按钮 单击Submit,我需要执行一个客户端JavaScript函数来执行必要的操作 现在,当我想阻止文本字段中的回发时(按enter键) 我添加了一个按键JavaScript函数,如下所示: 功能ONNETKEYPRESS(事件){ var-keyNum=0; if(window.event)//IE { keyNum=event.keyCode; } else if(event.which)//Net

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

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

单击Submit,我需要执行一个客户端JavaScript函数来执行必要的操作

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

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



功能ONNETKEYPRESS(事件){
var-keyNum=0;
if(window.event)//IE
{
keyNum=event.keyCode;
}
else if(event.which)//Netscape/Firefox/Opera
{
keyNum=event.which;
}
否则返回true;
如果(keyNum==13)//输入按下的键,然后开始搜索,否则不执行任何操作。
{
OnButtonClick();
返回false;
}
其他的
返回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;
        }

功能ONNETKEYPRESS(此窗体,事件){
var-keyNum=0;
if(window.event)//IE
{
keyNum=event.keyCode;
}
else if(event.which)//Netscape/Firefox/Opera
{
keyNum=event.which;
}
否则返回true;
如果(keyNum==13)//输入按下的键,然后开始搜索,否则不执行任何操作。
{
OnButtonClick();
返回false;
}
其他的
返回true;
}
我能够阻止回发

有人能证实这里到底发生了什么吗

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


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

在用于通过JavaScript提交表单的onsubmit中返回false。

必须与未发布的其他代码进行一些交互。您的代码在两种变体中都停止了表单提交,没有理由不这样做

但诱捕回车键很难正确操作,而且可能会像其他任何东西一样让人烦恼。几乎总有更好的办法

例如,正如altCognito所建议的,have'form.onsubmit'返回false,这样表单就不会响应用户交互而提交。此外,如果您将AJAX代码(假设您正在这样做)放在onsubmit处理程序中,而不是在按钮上单击,那么您也可以这样做,即按Enter键与单击submit按钮具有相同的效果,这通常是用户所期望的


如果您不想这样做,那么似乎根本没有理由包含该元素。如果您从未期望浏览器将输入元素提交到任何地方,那么让输入元素单独存放是完全有效的。

找到了解决此问题的方法

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

因此,我在表单中引入了一个隐藏的文本字段,所有内容都神奇地工作。 我甚至不需要为文本字段处理onkeypress事件

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

这对我来说非常有效


这在FF中不是一个问题,因为按enter键直接导致call to submit按钮的onclick事件。

之所以来到这里,是因为至少有IE 7和8的相关观察:

如果表单上只有一个文本输入和一个提交按钮,并且用户按下返回键,IE将不会在请求中包含提交按钮的名称/值对。插入时,只有文本输入的值才会出现

如果我添加另一个文本输入,文本输入和提交按钮的参数都会被发布。第二个文本输入甚至可以隐藏:

因此,这与事件无关,而是与简单的表单提交有关


GET和POST都会发生这种情况。将select元素添加到表单不会更改行为。-非常奇怪。

您好,您还可以禁用默认行为

jQuery('#yourInput').keydown(function (e) {
  if (e.keyCode == 13) {
    e.preventDefault();
  }
});

干杯

让我试着用一句话来重新解释这个问题。IE是否对带有单输入type=“text”控件和提交按钮的表单有任何问题。此外,我在IE中读到,如果表单中只有一个文本字段和一个提交按钮,则在表单提交中按enter可获得结果。但是,如果有多个文本框,IE不会在按enter键时自动回发表单,而是触发按钮的onclick事件。此行为仅适用于IE。我不想提交表单。事实上,我希望阻止表单提交,因为我通过调用AJAX pagemethods来处理请求-响应。有时,根据元素事件的配置,您可能需要停止整个冒泡。请阅读这篇关于QuickMode的文章,它可能会对您有更好的帮助
jQuery('#yourInput').keydown(function (e) {
  if (e.keyCode == 13) {
    e.preventDefault();
  }
});