1

我有一个附加了事件的父元素,mouse up以及mouse down一个附加了事件的子元素click

在父母触发事件后,有什么方法可以防止click事件发生在孩子身上?mouseup

一个例子,在这里的 JSfiddle上,如果我点击它,目标是使内部正方形不会变成绿色。

理想情况下,我想在不修改$('#inner').on('click', function(){}). 我已经知道我可以设置一个布尔值mouseup并检查它,click但我试图找到一种方法来做到这一点而不修改点击事件。

click使用 jquery(或任何其他库)是选项,除了不修改方法之外,我真的没有任何限制。

编辑

感谢@adeneo 的建议,这看起来很有希望,但它让我意识到我错过了问题的很大一部分。里面mouseup会有一个条件检查,看看是否应该阻止点击。如果我删除了该事件,我可以在避免点击后以某种方式将其添加回来吗?以一个setTimeout为例。我不确定如何(或是否有可能)获取对已删除click函数的引用,然后重新添加处理程序。

希望这里的这个新小提琴可以帮助我更好地解释它!

4

4 回答 4

0

我很确定这是您正在寻找的答案:

$($(this)).children().click(function (event) { // Preveu la propagació del click als fills 
                // event.stopPropagation();
            });
于 2013-09-30T12:11:29.430 回答
0

只需用以下代码替换您的代码并检查。要停止内部 div 的点击事件,您可以使用 preventDefault() 或 stopPropagation()。请检查以下

 $('#inner').on('click', function(e) {      
     $(this).stopPropagation();
    // or
    // $(this).preventDefault();
    alert('inner click');
});

$('#outer').on('mousedown', function(e) {
    $(this).css({'background': 'green'});
});

$('#outer').on('mouseup', function(e) {
    $(this).css({'background': 'yellow'});


});
于 2013-09-30T12:01:15.323 回答
0
$('#inner').on('mouseup', function(e) {    
        $(this).unbind("click");
        $(this).css({'background': 'black'});    
});

你试过这样吗?

于 2013-09-30T11:50:39.477 回答
0

尝试 e.stopImmediatePropagation(); 在你的内部代码中。

于 2013-09-30T11:52:43.000 回答