【问题标题】:JQuery trigger a keydown event firstjQuery首先触发一个keydown事件
【发布时间】:2019-08-16 05:32:24
【问题描述】:

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

我正在为这个网站写一个用户脚本。基本上,我无法更改网站的代码,只能更改自己的用户脚本代码。在我的脚本获取事件之前,网站有窗口捕获事件。

这是一个简化的例子:

<!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>

编辑:澄清
对于这个例子,我希望“body”警报首先出现,而不禁用“window”或“p”警报。所以我希望结果是:
“主体”、“窗口”、“p”

“正文”、“p”、“窗口”

【问题讨论】:

  • 那么,你的问题到底是什么?
  • 也没明白,哈哈。您想阻止警报吗?
  • 警报只是用来演示哪个事件首先触发。我希望身体的点击事件首先触发,所以基本上,我希望它首先提醒身体

标签: javascript events event-handling dom-events


【解决方案1】:
<!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>

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

【讨论】:

  • 这不起作用。使用这段代码,如果我点击 body 而不是 p 标签,什么都不会发生(因为其他点击事件被永久禁用)。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
相关资源
最近更新 更多