jquery preventDefault() 在 chrome 中有时不起作用

jquery preventDefault() is not working sometimes in chrome

我试图通过 preventDefault() 阻止回车键的默认行为,但这不是 working.Here 是我的代码

$(document).ready(function(){
 $("#Last").keydown(function(event){
     if (event.keyCode==13) {
      event.preventDefault();
      alert("Enter Pressed");
      }});

 $("#ffff").click(function(event){
        event.preventDefault();
        alert("Submit Button Clicked");
         });
});

这里是 html 部分

<form action="http://www.google.co.in">
First name: <input type="text" name="FirstName" value="Al"><br>
Last name: <input type="text" id="Last" name="LastName" value="McCoy"><br>
<input type="button" value=" Next " id="validate">
<input id="ffff" type="submit" value="Submit">
</form> 

所以根据上面的代码,如果我在姓氏字段上按回车键,它应该只提醒 Enter Pressed,但它会提醒 both.Is 代码中有什么错误吗?这里是 link 详情 Js.do

一个。 Wolff 是正确的,因为 alert() 框会发生这种情况。这与我在 C# 中遇到的问题非常相似,这里解释了为什么会发生这种情况。

Javascript中的主线程在调用alert时暂停指定函数的执行。但是,它不会暂停 Javascript 的执行。因此,即使初始事件从未结束,您的第二个事件也会被调用。这就是 event.preventDefault() 不起作用的原因。如果您 运行 在控制台打开的情况下执行下面的代码,您应该注意到 click 在退出 keydown 被记录之前被记录。

我得到的日志输出是:

Start KeyDown Function
Start Click Function
End Click Function
End KeyDown Function

$(document).ready(function() {
  $("#Last").keydown(function(event) {
    if (event.keyCode == 13) {
      console.log('Start KeyDown Function');
      alert("Enter Pressed");
      event.preventDefault();
      console.log('End KeyDown Function');
    }
  });

  $("#ffff").click(function(event) {
    console.log('Start Click Function');
    event.preventDefault();
    alert("Submit Button Clicked");
    console.log('End Click Function');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form action="http://www.google.co.in">
  First name:
  <input type="text" name="FirstName" value="Al">
  <br>Last name:
  <input type="text" id="Last" name="LastName" value="McCoy">
  <br>
  <input type="button" value=" Next " id="validate">
  <input id="ffff" type="submit" value="Submit">
</form>