jQuery $(document).on如何为动态标记链接点击事件设置stopPropagation()

时间:2017-06-14 08:11:28

标签: javascript jquery dynamic preventdefault stoppropagation

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

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

我们在Jquery lib中定义了click函数。

现在我想在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中的标记链接停止传播?

如果我设置class =&#34; page-list&#34;在li标签中,它会起作用。

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

2 个答案:

答案 0 :(得分:0)

:: [在chrome中工作] ::

if(someFlag){
  // trigger default event behavior
  return true;
} else {
  evt.stopPropagation();
  evt.preventDefault();
}

答案 1 :(得分:0)

您的代码中有一些混淆:

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

所以,如果我想在停止传播时做些什么,我会怎么做:

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