我目前正在处理Chrome扩展程序,我需要在加载扩展程序的任何页面上阻止默认点击操作。通常我会像下面这样做以防止默认操作:
$('.some-element').click(function(e){
e.preventDefault()
// some other code
});
我在这里使用与扩展相同的方法,但我发现有时这会起作用,有时则不行。例如,如果我转到页面区域中<a>
标记已绑定了preventDefault的网站,那么该网站的preventDefault将阻止我的事件运行..
点击事件的层次结构如何工作 - 是否第一个加载的函数将始终首先触发?如果是这样,我可以在事件上强加层次结构,这样我的事件将始终首先触发,从而阻止在页面上加载任何其他操作?
页面上已经存在的操作只需要暂时禁用,因此如果我不能再绑定它们,那么我完全取消绑定所有事件的方法可能不合适..
由于
答案 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];
}
}