JavaScript警报功能行为

时间:2010-10-07 13:46:50

标签: javascript jquery

在ASP.NET中,当文本框控件具有焦点时,当用户按下回车时,我阻止了默认的回发操作。请参阅以下代码

      $("#TextBox1").keydown(function(e)
        {
            if(e.keyCode == 13)
            {
                //alert("Hello");
                return false;
            }
        });

此代码工作正常。但如果我取消注释警报功能调用,那么页面帖子就不会停止。

我的问题是为什么警报电话会产生问题?

5 个答案:

答案 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
      }
  });