【问题标题】:Clicking children triggers parent [duplicate]单击子项触发父项[重复]
【发布时间】:2015-07-14 15:35:00
【问题描述】:

我在这方面发现了很多问题,但没有一个解决方案对我有好处。当我将多个元素堆叠在一起时,我不断遇到一个功能(在我的情况下是问题)。我有这样的dom情况。

<div class="body" data-type="body" onclick="foo(this)">
  <div class="container" data-type="container" onclick="foo(this)">
  </div>
</div>

所以当我点击 .body 时,console.log 会显示正确的元素。当我单击 .container 时,两个元素都会触发 onclick 事件。有什么办法可以克服这个吗?或者是否有可能以其他方式添加听众?我的纯 jquery 方法看起来像这样。当然,当我使用纯 jquery 时,我没有内联 onclick。

function initSelectable(){
  $('*[data-type]:not(.item-wrapper)').unbind('click').bind('click',function(){
    console.log($(this));
  });
}

感谢您的每一个建议和/或回答!

【问题讨论】:

    标签: jquery


    【解决方案1】:

    确保事件没有传播。使用这个:

    event.preventDefault();
    event.stopPropagation();
    event.stopImmediatePropagation();
    

    在您的代码中:

    function initSelectable(){
      $('*[data-type]:not(.item-wrapper)').unbind('click').bind('click',function(event) {
        console.log($(this));
        event.preventDefault();
        event.stopPropagation();
        event.stopImmediatePropagation();
      });
    }
    

    【讨论】:

    • 反对者可以解释原因。
    • 其实你很快就解决了这个问题。现在我明白为什么这不起作用了。我实际上尝试了这种防止一切的方法,但在错误的地方。非常感谢。您的答案将在 6 分钟后标记为解决方案。
    • 为什么不使用未弃用的 .on/.off 事件处理程序?
    • 我投了反对票,因为在编辑之前,您只包含了前 3 行代码(即event.preventDefault() 等),而不考虑 OP 的上下文。不幸的是,我的投票现已锁定。
    • @JayMee 我伪造了一个编辑。您可以删除您的反对票。
    猜你喜欢
    • 2013-11-28
    • 2014-05-12
    • 1970-01-01
    • 2016-12-16
    • 2017-06-09
    • 1970-01-01
    • 2014-06-29
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多