jQuery click()上的div触发了父对象click()事件

时间:2012-12-02 09:44:10

标签: jquery onclick

    <div class="parent">
        <div class="child">
        </div>
    </div>
    <script type="text/javascript">
    $(document).on("click", ".parent", function(event){
        doAjaxCall();
    });

    $(document).on("click", ".child", function(event){
        doSomething(); // and DON'T call doAjaxCall();
    });
</script>

event.stopPropagation();return false;也无效。可能是什么问题呢?

编辑:好吧,很明显它正在研究js小提琴:http://jsfiddle.net/Smbb4/ 我必须再次检查我的代码..

Edit2:解决方案:

    $('.parent').click(function(event) {

        if ( $(event.target).closest('.child').length > 0 ) {
            var close = $(event.target).closest('.child');
            var windowID = close.data('windowid');

            closeWindow(windowID);
            return false;
        }
        });

3 个答案:

答案 0 :(得分:4)

对于父级,您只需要一个单击处理程序。以常规方式处理事件,除非原始目标在孩子内部,在这种情况下,你分支并做一些不同的事情。

$(document).on("click", ".parent", function(event){

    if ( $(event.target).closest('.child').length > 0 ) {
        doSomething;
        return false;
    }

    doAjaxCall();
});

答案 1 :(得分:1)

试试这种方式

$(".parent").click(function() {

});

$(".child").click(function() {

});

它应该可以正常工作。没有必要将它们放在document.ready function

答案 2 :(得分:-1)

发现问题:

  

因为您正在使用body元素而不是直接使用   img.theater事件将泡到身体元素和那个   它是如何工作的。

     

在事件冒泡过程中.theater-wrapper元素点击事件   会被触发,所以你会看到它。

jQuery on() stopPropagation not working?

解决方案:

$('.parentParent').on("click", ".child", function(event){});