Javascript 带有单个文本字段的HTML表单+;防止Internet Explorer中的回发
我注意到IE中有一种相当奇怪的行为 我有一个HTML表单,只有一个输入文本字段和一个提交按钮 单击Submit,我需要执行一个客户端JavaScript函数来执行必要的操作 现在,当我想阻止文本字段中的回发时(按enter键) 我添加了一个按键JavaScript函数,如下所示: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
功能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();
}
});