【问题标题】:How to disable click events on a parent DOM object without disabling click events on its child DOM object?如何禁用父 DOM 对象上的点击事件而不禁用其子 DOM 对象上的点击事件?
【发布时间】:2009-09-25 00:22:17
【问题描述】:

我有一些这样的 HTML:

<a class="button">
    <span>
        <span>
            <span class="buttonspan">Content</span>
        </span>
    </span>
</a>

我已经在父 Anchor 对象上有了一些事件。现在我正在尝试在子 span 元素上添加一个单击事件,同时禁用父 Anchor 对象上的单击事件。我正在使用 jQuery 来实现这一点,但我无法弄清楚。我的 jQuery 代码是这样的:

$('a.button').click(function(event){
    return false;
});

$('.buttonspan').live('click', function(event){
    event.preventDefault();
    event.stopImmediatePropagation();
    // some function
});

如果我执行上面的代码,它也会阻止子元素点击事件。但是如果我不做第一部分,也会触发父点击事件。有没有办法在不禁用新添加的子点击事件的情况下禁用父事件?

【问题讨论】:

    标签: javascript jquery javascript-events


    【解决方案1】:

    您可以在父按钮上设置点击事件,并使用事件目标来确定点击了什么并执行必要的操作。

    $('a.button').click(function(e) {
        var $target = $(e.target);
    
        if ($target.is('.buttonspan')) {
            // do actions for the .buttonspan click
        } else {
            // do actions for a click anywhere else inside a.button
            e.preventDefault();
        }
    });
    

    【讨论】:

    • Maver,非常感谢您的快速回复。当我单击 dom 对象时,这似乎有效,但是如果我使用 jQuery 触发方法以编程方式触发单击事件怎么办。例如:$('.buttonspan').trigger('click');。在这种情况下它似乎不起作用。
    • 当 .buttonspan 的点击事件被编程触发时,它应该仍然有效。我只是对此进行了测试以确保它确实可以正常工作。
    • 是的,Marve,还有其他问题。您的解决方案有效!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多