检查事件侦听器是否已在侦听对象(以避免重复操作)

时间:2015-03-27 16:46:52

标签: javascript jquery

我的页面如下:

<a class="myClass">1</a>
<a class="myClass">2</a>
<a class="myClass">3</a>

<a class"add_anchor">Add Anchor</a>

当页面完全加载时,我将监听器绑定到执行某个函数a.myClass的{​​{1}}。

点击f通过AJAX向列表添加新的Add Anchor。因此,要收听所有a.myClass s(新添加的和初始的),我应该两次调用监听器,整体代码如下:

a.myClass

结果,function listenToMyClassClick{ $('.myClass').click(function(e){ e.preventDefault(); f(); }); } listenToMyClassClick(); $('.addAnchor').click(function(e){ $.ajax({ type: "POST", url: url, cache: false, success: function(data){ listenToMyClassClick(); } }); }); 被执行了两次。如何检查jQuery是否已经执行了一个监听器,以便我不再执行它?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

创建一个委托事件,就像Sergiu建议的那样。将click事件绑定到动态元素列表中的元素,而不是将click事件绑定到元素的父元素,即使单击其子元素,它仍会引发单击事件。这称为事件冒泡。这是一段显示如何使用jQuery执行此操作的代码:

// Attach a delegated event handler
$( "#list" ).on( "click", "a", function( event ) {
    f();
});

您将点击事件直接绑定到&#34; #List&#34;,作为父母并告诉它专门侦听来自&#34; a&#34;元素,在第二个参数中定义。