2012-08-09 124 views
1

我有一个子类body_left_details的子div,它位于父类div body_left_bar中。这两个div都附有onclick事件,但是当您点击body_left_details时,我想阻止body_left_bar冒泡。以下是相关代码:javascript stopPropagation()阻止函数被触发

$(function() { 
    $('.body_left_bar').click(function() { 
     body_right_load('parent'); 
    }) 
    $('.body_left_details').click(function(e) { 
     e.stopPropagation(); 
     body_right_load('child'); 
    }) 
}) 
function body_right_load(str) { 
    alert(str); 
}​ 

够简单。但为什么当我点击body_left_details时,body_right_load('child')没有被调用?我在e.stopPropagation()之后直接测试了一个alert(),并且它工作正常。停止传播后是否允许外部功能?这会被认为是冒泡吗?

在Chrome中测试Windows 7 wamp。任何洞察赞赏!编辑:Relevant jsfiddle。点击父div将导致警报,但点击“阅读有关”不会产生任何结果。

+3

它可能与'body_right_load()'*真正*声明的方式有关。如果它真的看起来像你发布的内容,它会起作用。 – Pointy 2012-08-09 17:13:38

+0

请提供演示此问题的小提琴。 – Niko 2012-08-09 17:15:28

+0

事实上,我已经略微减弱了总体布局,但是我已经改变了body_right_load以显示如上并且仍然不会触发。给我一小把小提琴。 – 2012-08-09 17:16:06

回答

1
$(function() { 
    $('.body_left_bar').on('click', function() { 
     body_right_load('parent'); 
    }) 
    $('.body_left_details').on('click', function(e) { 
     e.stopImmediatePropagation(); 
     body_right_load('child'); 
    }) 
}) 
function body_right_load(str) { 
    alert(str); 
}​ 
+0

这与op代码的执行有什么不同? – Alxandr 2012-08-09 17:34:05

+1

http://api.jquery.com/on/“。通过调用event.stopPropagation(),处理程序可以防止事件进一步向上冒泡文档树(从而阻止处理这些元素的处理程序)。任何其他处理程序为了防止发生这种情况,请调用event.stopImmediatePropagation()。(绑定到元素的事件处理程序按照与它们绑定的顺序相同的顺序调用)。“ – darthwade 2012-08-09 17:36:03

+1

我再问一次,那会怎样?原始发布代码? '.body_left_details'没有超过1个事件,因此使用'stopImmediatePropagation'不应该与'stopPropagation'形式不同,除了(我不确定这一点),看起来(从你粘贴的文档中),'stopImmediatePropagation '仍然会在父元素上运行click-event(换句话说,它会传播,而不是在同一元素上的处理程序),但我可能在这一点上是错误的。 – Alxandr 2012-08-09 17:39:42