这似乎是一个荒谬的简单问题,但似乎更难......
我想阻止默认处理中间点击。我创建了一个JSFiddle并投入stopPropagation
,stopImmediatePropagation
,preventDefault
和return false
- 就像这样:
$(document).on("mousedown", "a", function(e)
{
console.log("\nprevent mousedown...");
e.stopPropagation();
e.stopImmediatePropagation();
e.preventDefault();
console.log("...mousedown prevented");
return false;
});
但是中间点击被触发了。顺便说一句,它是在我发布中间按钮时被解雇的。这是JSFiddle: http://jsfiddle.net/Gq4p9/4/
在Chrome 29,Firefox 23和IE11上进行了测试。
我希望有人能够找到,为什么这个脚本不会阻止默认处理。
答案 0 :(得分:4)
正如您在评论中提到的那样,如果您将 jQuery object 作为选择器传递
$(document).on ("click", $("a"), function (e) { ...
虽然API说selector
预计是字符串类型。
你也可以随时使用普通的javascript click eventListener。
link.addEventListener ("click", function (e) {
if (e.which === 2)
e.preventDefault();
})
继承人Fiddle
答案 1 :(得分:2)
我最近遇到过这个问题(实际上恰恰相反:我只想允许中间点击通过)。问题是您要阻止的行为位于click
上,并且阻止mousedown
的默认行为并不一定会阻止后续事件的默认行为。
虽然目前的解决方案完全正确,但它们不适用于IE8及更低版本,因为对于那些浏览器,click
事件的which
属性始终返回0
,无论哪个按钮是用过的。所以我写了一个jQuery插件, jquery.whichclick 来触发额外的事件:leftclick
,rightclick
,middleclick
和anyclick
- 全部报告正确的event.which
,并将stopPropagation
,stopImmediatePropagation
和preventDefault
绑定到随后的click
事件。
根据代码的其余部分,该插件允许您使用:
$( document ).on( 'middleclick', function( e ){
e.preventDefault();
} );
或者:
$( document ).on( 'anyclick', function( e ){
if( e.which === 2 ){
e.preventDefault();
}
else {
// Other conditions you may be looking for...
}
} );
如果你不关心IE的支持,那就太过分了 - 只要按照其他人的建议去做吧!
答案 2 :(得分:0)
你正在寻找的是这个条件:
if( e.which == 2 ) { // prevent default behaviour }