考虑以下代码:
HTML
<a href="http://www.google.com" target="_blank" id="myLink" class="anyclass">testlink</a>
JavaScript
$('#myLink').on("mousedown",doMouseDown);
function doMouseDown(e)
{
e.stopImmediatePropagation();
console.log("Mouse down");
return true;
}
这是我的代码的一个非常简化的版本,但问题是完全一样的。简而言之:在我的处理程序中使用 e.stopImmediatePropagation()
,我希望在单击链接时不会将我发送到 Google。我应该只执行 console.log()
。
我所有的研究表明我的想法是对的,但它仍然同时执行“鼠标按下”处理程序和链接的默认“点击”处理程序(即它在新选项卡中打开 Google)。
我试过,没有说服力,添加一个 e.preventDefault()
作为我的处理程序的第一条指令,我试过返回 false
,我已经尝试在绑定(bind)时将我的处理程序定义为匿名函数,我尝试简单地从匿名函数调用它,所有这些都以不同的组合进行,没有任何改进。
我必须承认我完全没有办法解决这个问题。你们中的任何人都可以为我指明正确的方向吗?任何帮助将不胜感激。
如果你想测试,here's the fiddle
最佳答案
试试这个
var i=0;
$('#myLink').on('mousedown mouseup click', function(e) {
e.preventDefault();
e.stopImmediatePropagation();
console.log(e.type);
console.log(i);
i++;
});
在控制台打印
"mousedown"
0
"mouseup"
1
"click"
2
和使用
var i=0;
$('#myLink').on('mousedown mouseup click', function(e) {
if(i>0)
{
return false;
}
e.preventDefault();
e.stopPropagation();
console.log(e.type);
console.log(i);
i++;
});
在控制台打印
"mousedown"
0
关于javascript - stopImmediatePropagation 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18746243/