繁体   English   中英

JavaScript警报功能行为

[英]JavaScript alert function behaviour

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

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

此代码可以正常工作。 但是,如果我取消注释警报功能的调用,则页面发布不会停止。

我的问题是为什么警报呼叫会造成问题?

我想念您正在使用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的默认操作来可靠地(跨浏览器和OS)阻止表单提交。 您说它正在运行,如果可以在目标浏览器中运行,那很好,但是...

在警报框被取消之前,不会执行return false

届时,您的表格已发布很久了。

如果您确实想要这种类型的行为,则可以使用event.preventDefault():

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

试试这个

 $("#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
      }
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM