繁体   English   中英

嵌套div上的jQuery click()

[英]jQuery click() on a nested 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时,它会运行带有inner1 div和wrapperdo_something()

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

使用stopPropagation

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

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

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

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

    // Other Stuff
});

你的选择器是'div'所以在每个被点击的div上都会运行。 这包括此示例中的wrapper,inner1和inner2。

如果你只想让inner1触发该函数,你的代码将如下所示:

$('.inner1').click(function(){
    var class_name = $(this).attr('class');
    do_something(class_name);
});
<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>

事件会一直冒泡,直到您使用stopPropagation方法停止它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM