javascript - stopImmediatePropagation 未按预期工作

标签 javascript jquery mouseevent

考虑以下代码:

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/

相关文章:

用于绑定(bind)对象中指定事件的 JavaScript 函数

javascript - jQuery:从给定的 id 中选择特定元素并将焦点放在它上面。优化方式

JavaFX 2 MouseClicked 事件未按应有的方式生成(如在 JAVA 中)

javascript - 在面板中使用 JavaScript

javascript - 操作由 Promise AngularJS 返回的返回变量

php - 从列表元素运行 php

java - 每次鼠标单击时的单独操作

javascript - 如何从MouseEvent对象获取点击元素的索引号

javascript - Onclick 某个功能不起作用

jquery - Bootstrap Navbar 将打开,但不会关闭