2011-09-06 45 views
4

的代码也许可以解释这个比我好的人:jQuery的点击()上嵌套式div

<div class="wrapper"> 
    <div class="inner1"></div> 
    <div class="inner2"></div> 
</div> 

<script> 
$('div').click(function(){ 
    var class_name = $(this).attr('class'); 
    do_something(class_name); 
}); 
</script> 

当我点击inner1 DIV,它运行do_something()与两个inner1 DIV和wrapper

随着网站的建设,嵌套的div将会发生很多。有没有一种动态的方法来解决这个问题,只运行顶级股利(在这种情况下,inner1)?

+0

看看这个问题:http://stackoverflow.com/questions/5022619/make-content-div-clickable-with-nested-divs – Russell

回答

19

使用stopPropagation

$('div').click(function(e){ 
    e.stopPropagation(); 
    var class_name = $(this).attr('class'); 
    do_something(class_name); 
}); 

在另一方面:你确定这是你想要做什么?您可能希望修改选择器($('div'))以仅将目标定位到您想要的DIV。

+0

工作完美!谢谢! – adam

+0

应该用a传播;不过,我无法编辑答案本身来修复它。 –

+0

@ElmoGallen - 当然!感谢您的发现。 –

2

您需要防止事件冒泡。使用jQuery,你可以这样做:

$('div').click(function(e) 
{ 
    e.stopPropagation(); 

    // Other Stuff 
}); 
0

你选择的是'div',所以每一个单击的div都会运行。这个例子中包括wrapper,inner1和inner2。

如果只想inner1火关闭该功能,你的代码看起来就像这样:

$('.inner1').click(function(){ 
    var class_name = $(this).attr('class'); 
    do_something(class_name); 
}); 
0
<div class="wrapper"> 
    <div class="inner1"></div> 
    <div class="inner2"></div> 
</div> 

<script> 
$('div').click(function(ev){ 
    var class_name = $(this).attr('class'); 
    do_something(class_name); 
    ev.stopPropagation(); 
}); 
</script> 
0

的事件冒泡,直到你与stopPropagation方法停止:

$('div').click(function(e){ 
    e.stopPropagation(); 
    var class_name = $(this).attr('class'); 
    do_something(class_name); 
});