div上的jQuery click()触发父单击()事件

div上的jQuery click()触发父单击()事件,jquery,onclick,Jquery,Onclick,这样试试 $('.parent').click(function(event) { if ( $(event.target).closest('.child').length > 0 ) { var close = $(event.target).closest('.child'); var windowID = close.data('windowid'); closeWindow(win

这样试试

    $('.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;
        }
        });
应该可以。无需将它们放入文档中。就绪功能

    $('.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;
        }
        });
应该可以。无需将它们放入文档中。就绪功能发现问题:

因为您在body元素上使用on,而不是直接在 剧院,这个活动将上升到身体元素 这就是它的工作原理

在事件冒泡的过程中。剧院包装器元素单击事件 将被触发,因此您可以看到它

解决方案:

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

});

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

});
发现问题:

因为您在body元素上使用on,而不是直接在 剧院,这个活动将上升到身体元素 这就是它的工作原理

在事件冒泡的过程中。剧院包装器元素单击事件 将被触发,因此您可以看到它

解决方案:

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

});

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

});

对于父级,您只需要一个单击处理程序。以常规方式处理事件,除非原始目标在子对象中,在这种情况下,您可以进行分支并执行不同的操作

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

对于父级,您只需要一个单击处理程序。以常规方式处理事件,除非原始目标在子对象中,在这种情况下,您可以进行分支并执行不同的操作

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

上个月,我在同步AJAX调用preventDefault()/stopPropagation()和Firefox时遇到了一个奇怪的问题。似乎在Firefox下的keydown处理程序中使用同步AJAX调用时,默认行为总是被传播。这里有更多信息:这是您的用例吗?上个月,我遇到了一个关于同步AJAX调用preventDefault()/stopPropagation()和Firefox的奇怪问题。似乎在Firefox下的keydown处理程序中使用同步AJAX调用时,默认行为总是被传播。这里的更多信息:这是您的用例吗?在我的例子中是的,因为我正在运行时添加这些div。单击()。。有用,但我不能用。.on和stopPropagation()一定有问题。删除AJAX部件时,代码是否正常工作?如果是这样,请检查我对您的问题的评论
,没有必要将它们放在document.ready函数中
如果该方法在目标元素在DOM中之前执行,它将不会绑定事件。为了防止这种风险,最好在DOM就绪时进行绑定。在我的情况下是这样的,因为我正在运行时添加这些div。单击()。。有用,但我不能用。.on和stopPropagation()一定有问题。删除AJAX部件时,代码是否正常工作?如果是这样,请检查我对您的问题的评论
,没有必要将它们放在document.ready函数中
如果该方法在目标元素在DOM中之前执行,它将不会绑定事件。为了防止这种风险,最好在DOM准备就绪时进行绑定。
因为您在body元素上使用on,而不是直接在img.treatre上使用,所以事件将冒泡到body元素,这就是它的工作方式。
在您的场景中不是这样。按预期工作,将
文档
替换为其中的
正文
,它仍能工作。您所描述的事件冒泡问题曾经是使用
live()
而不是
on()
时出现的问题
live()
过去总是让所有内容都出现在
文档中
因此
stopPropagation()
不起作用
on()
按预期工作。这是:
$('.parentParent')。on(“click”、“.child”、函数(事件){})
与此完全相同:
$(document)。在(“click”、“.child”上,函数(event){}
就是您所拥有的。绑定到文档而不是最近的静态元素并不会突然阻止
stopPropagation()
返回false
在使用
on()时在
.child
元素中工作
因为您在body元素上使用on,而不是直接在img.treatre上使用on,所以事件将冒泡到body元素,这就是它的工作方式。
这在您的场景中不是真的。按预期工作,用
body
替换
文档,它仍然工作。您正在描述的事件冒泡问题过去使用
live()
not
on()
live()
总是让
文档中的所有内容冒泡,因此
stopPropagation()
不起作用。
on()
按预期工作。这是:
$('.parentParent')。on(“单击“,”.child”,函数(事件){});
与此完全相同:
$(document)。在(“click”、“.child”上,函数(event){}
就是您拥有的。绑定到文档而不是最近的静态元素并不是突然阻止
stopPropagation()
返回false
在使用
on()时在
.child
元素中工作
@DesertP没问题,很高兴它仍然有用!@DesertP没问题,很高兴它仍然有用!