5

考虑以下代码:

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()处决。我所有的研究都表明我的想法是正确的,但它仍然同时执行“mousedown”处理程序和链接的默认“click”处理程序(即它在新选项卡中打开 Google)。

我尝试过添加一个e.preventDefault()作为我的处理程序的第一条指令,我尝试过返回false,我尝试过在绑定时将我的处理程序定义为一个匿名函数,我尝试过简单地从一个匿名函数调用它,所有这一切都在不同的组合中,没有任何改进。我必须承认我完全没有想法来解决这个问题。你们中的任何人会这么好心地指出我正确的方向吗?任何帮助将不胜感激。

如果你想测试,这里是小提琴

4

2 回答 2

3

尝试这个

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
于 2014-04-20T16:31:30.487 回答
0

谢谢你的主意!我一直在努力实现hoverclick(移动 Chrome 会触发hoverclick点击菜单)。我对其进行了一些修改以满足我的需要,但它不是 100% 固定的——在 PC 和黑莓浏览器中输入时,您必须单击两次才能关闭子菜单。

http://jsfiddle.net/j24gpw4z/2/

var i = 0;
function preventClick(e) {
    console.log("function");
    if (i > 0) {
        console.log(i + ": " + e.type);
        i = 0;
        console.log("false: " + i);
        return false;
    }
    $("#subnav").slideToggle("fast", "linear");
    console.log(i + ": " + e.type);
    i++;
};

$(".submenu").hover(function(e) {
    e.preventDefault();
    preventClick(e);
    i++
},
                    function(e) {
    e.preventDefault();
    console.log("hover out");
    $("#subnav").hide();
    i = 0;
}
                   );

$(".submenu").click(function(e) {
    e.preventDefault();
    preventClick(e);
    i = 0;
});
于 2015-10-19T00:07:17.403 回答