JavaScript警报函数行为
在ASP.NET中,当文本框控件具有焦点时,当用户按enter键时,我将阻止默认的回发操作。请参阅下面的代码JavaScript警报函数行为,javascript,jquery,Javascript,Jquery,在ASP.NET中,当文本框控件具有焦点时,当用户按enter键时,我将阻止默认的回发操作。请参阅下面的代码 $("#TextBox1").keydown(function(e) { if(e.keyCode == 13) { //alert("Hello"); return false; } }); 这段代码运行良
$("#TextBox1").keydown(function(e)
{
if(e.keyCode == 13)
{
//alert("Hello");
return false;
}
});
这段代码运行良好。但是,如果我取消对警报函数调用的注释,那么pagepost不会停止
我的问题是为什么警报呼叫会产生问题 在解除警报框之前,
返回false
将不会执行
到那时,您的表单已经发布很久了。如果您确实想要这种行为,可以使用event.preventDefault()
我没有注意到您正在使用
键控
。为了防止表单提交,我将使用submit
处理程序,在本例中,使用keydown
处理程序以及blur
处理程序(重置标志):
(或者您可以调用e.preventDefault();
而不是返回false
,这两种方法都有效。)您需要进行测试,以确保在任何情况下清除标志
或者,使
警报
异步:
$("#TextBox1").keydown(function(e)
{
if(e.keyCode == 13)
{
setTimeout(function()
{
alert("Hello");
}, 10);
return false;
}
});
这样,事件堆栈可以在发出警报之前展开。但是我不确定您是否可以通过取消键下键的默认操作来可靠地(跨浏览器和操作系统)防止表单提交。你说它可以工作,如果它可以在你的目标浏览器中工作,很好,但是…试试这个
$("#TextBox1").keydown(function(e)
{
if(e.keyCode == 13)
{
e.preventDefault();
}
});
您应该改用e.preventDefault
$("#TextBox1").keydown(function(e)
{
if(e.keyCode == 13)
{
e.preventDefault(); // won't trigger default behavior
alert("Hello"); // will work
}
});
我很惊讶这是真的alert
应该会让事情急停下来,如果没有任何特殊的ASP.Net内容,它就会这样做。如果您使用confirm
(应该也这么做),会发生什么情况?它不是这样工作的,我不能使用confirm,因为它有两个按钮。这里的任何代码专家都可以验证这一点?哪个浏览器可以验证这一点?有控制台错误吗?但警报框不是“同步”的吗?(你知道我的意思,呵呵…@Deniz:“阻塞”是你一直在寻找的词。“是的,它们是。”deniz,但它阻止了一些阻止默认行为的东西。因此,您将获得默认行为,即表单提交。返回false代码>仍然阻止表单提交。使用链接。Href从未被访问过。在我最初的代码中,如果我不使用警报它工作(至少在伊江和Firefox中我测试过),我的问题不是如何停止表单(因为我可以使用不同的代码路径),而是知道如果警报在返回假之前中间被调用,它会导致什么故障。@库马尔:是的。我本以为警报不会有什么不同(除了显而易见的),这就是它应该做的。似乎您使用的浏览器不允许事件处理程序阻止提交,如果它做了一些需要输入处理程序的事情(对我来说,这听起来很奇怪——这是您碰巧使用的吗?)。(续)@kumar:(继续)如果阻止默认的keydown
应该阻止表单提交,那么在keydown
事件处理程序全部完成之前不应该提交表单,并且警报应该阻止此事件的完成。你看到的绝对是特定于浏览器的。我会称之为浏览器中的bug,但我不制定规则。:-)谢谢我只是想确认在中间使用警报会引起奇怪的行为。看起来像是浏览器异步调用所有单击事件处理程序。这是真的吗?@kumar-对不起,我的代码中有一个类型。e、 preventDefault()应该可以工作。
$("#TextBox1").keydown(function(e)
{
if(e.keyCode == 13)
{
e.preventDefault();
}
});
$("#TextBox1").keydown(function(e)
{
if(e.keyCode == 13)
{
e.preventDefault(); // won't trigger default behavior
alert("Hello"); // will work
}
});