【问题标题】:How to use event.stopPropagation() in delegate()如何在委托()中使用 event.stopPropagation()
【发布时间】:2011-03-05 09:56:10
【问题描述】:

我的代码在 html 中如下所示:

<li class="arrow">    
    <div>
        <a href="javascript:void(0);" class="anchor">remove</a> 
    </div>                      
</li>

我使用 deligate() jquery 方法绑定我的元素(因为元素是动态出现的)

$obj.delegate(".arrow", "click", function() {
    alert("clicked on arrow");
});

$obj.delegate(".anchor", "click", function(event) {
     event.stopPropagation();
     alert("anchor clicked");
});

我的问题是,当我点击“.anchor”时,这两个事件都会发生。谁能告诉我如何在这种情况下使用 event.stopPropagation() ?我尝试了上面的方法,但没有工作。有没有其他方法可以做到这一点?

编辑:我尝试调用 event.isPropagationStopped(),它返回 true。但仍然调用了这两个事件。

【问题讨论】:

标签: javascript jquery events event-bubbling


【解决方案1】:

使用delegatelivestopPropagation 时存在限制。

您在处理程序中返回 false 以防止 eventPropagationdefault

试试

$obj.delegate(".anchor", "click", function(event) {
     alert("anchor clicked");
     return false;
});

【讨论】:

  • 哇,在写下我的答案的 4 分钟内发生了很多事情:) - 你有什么理由在代码中留下 .stopPropagation() 吗?我不相信它在这种情况下会做任何事情
  • 没有理由。我只是复制了一部分。我不小心把它放在那里了。
  • 为了让下一个人更清楚,我已经从答案中删除了 stopPropagation() (如果我的编辑通过了)。
【解决方案2】:

我的理解是.delegate.live 你需要return false。我相信这是因为事件是如何附加的——不是附加到元素,而是附加到它的祖先。

这是一个例子: http://jsfiddle.net/G3k8Z/

【讨论】:

    猜你喜欢
    • 2019-10-07
    • 2012-08-27
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2015-07-15
    相关资源
    最近更新 更多