事件冒泡&传播层次

时间:2017-08-16 20:55:15

标签: javascript jquery google-chrome-extension

我目前正在处理Chrome扩展程序,我需要在加载扩展程序的任何页面上阻止默认点击操作。通常我会像下面这样做以防止默认操作:

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

// some other code

});

我在这里使用与扩展相同的方法,但我发现有时这会起作用,有时则不行。例如,如果我转到页面区域中<a>标记已绑定了preventDefault的网站,那么该网站的preventDefault将阻止我的事件运行..

点击事件的层次结构如何工作 - 是否第一个加载的函数将始终首先触发?如果是这样,我可以在事件上强加层次结构,这样我的事件将始终首先触发,从而阻止在页面上加载任何其他操作?

页面上已经存在的操作只需要暂时禁用,因此如果我不能再绑定它们,那么我完全取消绑定所有事件的方法可能不合适..

由于

1 个答案:

答案 0 :(得分:0)

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

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

public class NamespacePrefixMapperImpl extends NamespacePrefixMapper{
    private final Map<String, String> map;

    public NamespacePrefixMapperImpl(Map<String, String> map) {
        this.map = map;
    }

    public String getPreferredPrefix(String namespaceUri, String suggestion, 
                                               boolean requirePrefix) {
        String value = map.get(namespaceUri);
        return (value != null) ? value : suggestion;
    }

    public String[] getPreDeclaredNamespaceUris() {
        return new String[0];
    }
}