在ASP.NET中,当文本框控件具有焦点时,当用户按下回车时,我阻止了默认的回发操作。请参阅以下代码
$("#TextBox1").keydown(function(e)
{
if(e.keyCode == 13)
{
//alert("Hello");
return false;
}
});
此代码工作正常。但如果我取消注释警报功能调用,那么页面帖子就不会停止。
我的问题是为什么警报电话会产生问题?
答案 0 :(得分:1)
我错过了您使用的keydown
。为了防止表单提交,我会使用submit
处理程序,在这种情况下使用keydown
处理程序,也可能是blur
处理程序(重置标志):
var cancelFlag = false;
$('#TextBox1')
.keydown(function(e) {
cancelFlag = e.keyCode == 13;
})
.blur(function() {
cancelFlag = false;
});
$('#theform').submit(function() {
if (cancelFlag) {
alert("Hello!");
}
return cancelFlag;
});
(或者你可以调用e.preventDefault();
而不是返回false
,这两种方法都有效。)你需要做一些测试,以确保在你想要清除它的每种情况下清除标志。
或者,使alert
异步:
$("#TextBox1").keydown(function(e)
{
if(e.keyCode == 13)
{
setTimeout(function()
{
alert("Hello");
}, 10);
return false;
}
});
这会让事件堆栈在发出警报之前展开。但我完全不确定你是否可以通过取消keydown
的默认操作来可靠地(跨浏览器和操作系统)阻止表单提交。你说它工作正常,如果它在目标浏览器中有效,那很好,但是......
答案 1 :(得分:0)
在警报框被解除之前,return false
将不会执行。
到那时,你的表格早已发布。
答案 2 :(得分:0)
如果您真的想要这种行为,可以使用event.preventDefault():
$("#TextBox1").keydown(function(e)
{
if(e.keyCode == 13)
{
e.preventDefault();
alert("Hello");
}
});
答案 3 :(得分:0)
试试这个
$("#TextBox1").keydown(function(e)
{
if(e.keyCode == 13)
{
e.preventDefault();
}
});
答案 4 :(得分:0)
您应该使用e.preventDefault
代替。
$("#TextBox1").keydown(function(e)
{
if(e.keyCode == 13)
{
e.preventDefault(); // won't trigger default behavior
alert("Hello"); // will work
}
});