jQuery首先触发keydown事件

时间:2019-08-16 05:32:24

标签: javascript events event-handling dom-events

在问这个问题之前,我对事件捕获和冒泡进行了一些研究。但是,它仍然不能解决我的问题。

我正在为该网站编写用户脚本。基本上,我不能更改网站的代码,而只能更改自己的用户脚本的代码。在我的脚本获取事件之前,网站上有捕获事件的窗口。

这是一个简化的示例:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
  //I cannot change this code (it is part of the webpage):
  $("p")[0].addEventListener("click",function(){
    alert("p");
  });
  $(window)[0].addEventListener("click",function(){
    alert("window");
  },true);

  //I can change this code (it is part of my userscript):
  $("body")[0].addEventListener("click",function(){
    alert("body: I want to come first");
  });
});
</script>
</head>
<body>

<p>Click Here</p>

</body>
</html>

编辑:澄清
对于此示例,我希望“身体”警报优先出现,而不禁用“窗口”或“ p”警报。所以我希望结果是:
“身体”,“窗口”,“ p”

“身体”,“ p”,“窗口”

1 个答案:

答案 0 :(得分:0)

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $("body")[0].addEventListener("click",function(){
    alert("body: I want to come first");
  });
  window.RemoveEventListener('click',alert,true);
  //I cannot change this code (it is part of the webpage):
  $("p")[0].addEventListener("click",function(){
    alert("p");
  });
  $(window)[0].addEventListener("click",function(){
    alert("window");
  },true);

  //I can change this code (it is part of my userscript):

});
</script>
</head>
<body>

<p>Click Here</p>

</body>
</html>

您可以使用它,因为我已禁用了事件警报,并在脚本标记的开头添加了脚本。