Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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_Google Chrome Extension - Fatal编程技术网

Javascript 事件冒泡&;传播层次

Javascript 事件冒泡&;传播层次,javascript,jquery,google-chrome-extension,Javascript,Jquery,Google Chrome Extension,我目前正在开发一个chrome扩展,我需要在加载扩展的任何页面上防止默认的点击操作。通常情况下,我会执行以下操作以防止出现默认操作: $('.some-element').click(function(e){ e.preventDefault() // some other code }); 我在这里对我的扩展使用相同的方法,但我发现有时这会起作用,而其他时候不会。例如,如果我访问的站点页面某个区域的标记已经绑定了preventDefault,那么该网站的preventDefault将阻

我目前正在开发一个chrome扩展,我需要在加载扩展的任何页面上防止默认的点击操作。通常情况下,我会执行以下操作以防止出现默认操作:

$('.some-element').click(function(e){
 e.preventDefault()

// some other code

});
我在这里对我的扩展使用相同的方法,但我发现有时这会起作用,而其他时候不会。例如,如果我访问的站点页面某个区域的
标记已经绑定了preventDefault,那么该网站的preventDefault将阻止我的事件运行

单击事件的层次结构是如何工作的?是否加载的第一个函数总是首先启动?如果是这样的话,有没有一种方法可以对事件施加一个层次结构,以便我的事件总是首先触发,从而防止在页面上加载任何其他操作

页面上已经存在的操作只需暂时禁用,因此如果无法再次绑定,则完全解除绑定所有事件的方法可能不适用


谢谢

请注意,普通事件侦听器(Element.addEventListener)和jQuery.click/.on是两个不同的东西。jQuery只设置一次侦听器,并有其内部回调数组

如果要防止触发所有特定类型的侦听器,请使用捕获模式将侦听器添加到窗口(第3个参数):


你是说你正在注入JavaScript代码来监听我在chrome开发者控制台中为其他人的网站假设的点击事件吗?我很困惑你是如何同时提到你的网站和其他网站的。如果你想做我认为你想做的事情,我认为这是行不通的。基本上,我试图通过我通过内容脚本注入页面的代码,阻止任何默认onClick事件在网站上触发。从那以后,我想用我自己的函数做几件事。到目前为止,它还可以工作,但正如我所说,如果网站上的元素上已经设置了event.preventDefault,那么该event.peventDefault将启动,而不是我通过内容脚本注入页面的event.preventDefault。我想我一次也没提到我的网站。。。它是一个chrome扩展插件,在窗口(最顶层的DOM对象)上安装一个mousedown侦听器,并为addEventListener的useCapture参数指定true,以便在从窗口到单击目标的捕获阶段的最开始截获事件。此代码将在目标鼠标向下移动之前运行。如果您在document_start上运行的内容脚本中执行此操作,则任何页面都无法取代它。这完全有道理,我们将在明天上午尝试此操作,并让您知道它是否有效。谢谢相关(一些解释):好的,你认为结合wOxxOm的建议:使用mousedown事件监听器而不是单击,并将事件监听器添加到窗口而不是正文将为上述代码增加更多确定性?@BenLiger是的,当然。好了,快到了。。。修改代码后,我的事件现在会在以前没有的站点上触发。现在唯一的问题是,我的“防止默认值”似乎不起作用,即页面上的其他功能仍与我的功能同时启动。@BenLiger,这是因为您对和的效果感到困惑。另外请注意,如果要确保事件处理程序在页内处理程序之前运行,脚本需要运行
文档\u start
window.addEventListener('mousedown', (e) => {
  e.preventDefault()
}, true);