Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript警报函数行为_Javascript_Jquery - Fatal编程技术网

JavaScript警报函数行为

JavaScript警报函数行为,javascript,jquery,Javascript,Jquery,在ASP.NET中,当文本框控件具有焦点时,当用户按enter键时,我将阻止默认的回发操作。请参阅下面的代码 $("#TextBox1").keydown(function(e) { if(e.keyCode == 13) { //alert("Hello"); return false; } }); 这段代码运行良

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

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