【问题标题】:jQuery $(document).on How to set stopPropagation() for dynamic a tag link click eventjQuery $(document).on 如何为动态标签链接点击事件设置 stopPropagation()
【发布时间】:2017-06-14 08:11:27
【问题描述】:

Jquery 在程序中动态创建链接。 就像

<div>
...
<li><a class="page-list">aaa</a></li>
...
</div>

我们已经在 J​​query lib 中定义了点击函数。

现在我想在 mousedown 中为这个点击事件做 stopPropagation。

$(document).ready( function() {
$(document).on('mousedown', '.page-list', function(e){
                var $target = $(e.target);
                $target.off('click', stopClickEvent);
                if (window.confirm('Will run click event?')) {
                                $(this).click();
                }
                $target.on('click', stopClickEvent);
        }); 
});
function stopClickEvent(e){
        e.stopPropagation();
        e.preventDefault();
}

不起作用,当我点击aaa时,它仍然运行点击事件。

如何停止$(document).on 中标签链接的传播?

如果我在 li 标签中设置 class="page-list" ,它将起作用。

<li class="page-list"><a>aaa</a></li> 

【问题讨论】:

  • 如果我在
  • 标签中设置 class="page-list",它会起作用。
  • aaa
  • 为什么!!!!?????
  • 因为点击事件附加到.page-list?所以它只适用于具有page-list 类名的元素。
  • 是的,点击事件附加到.page-list。
  • 标签: javascript jquery dynamic preventdefault stoppropagation


    【解决方案1】:

    您的代码中有一些混淆:

    首先,您不需要:var $target = $(e.target);,获取目标元素应该像 $(this) 一样简单,其次您不必为了停止事件传播而执行 $target.off$target.on ,它必须在回调中完成。然后,我认为click 处理程序运行是因为您在$(this) 上显式调用click(),这是元素本身。

    如果我想在停止传播的同时做某事,我会这样做:

    $(document).on('click', '.page-list', function(e) {
      e.stopPropagation();
      e.preventDefault();
      // ... 
      alert('Element clicked"');
      // ...
    });
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签