我的页面如下:
<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是否已经执行了一个监听器,以便我不再执行它?
感谢您的帮助。
答案 0 :(得分:0)
创建一个委托事件,就像Sergiu建议的那样。将click事件绑定到动态元素列表中的元素,而不是将click事件绑定到元素的父元素,即使单击其子元素,它仍会引发单击事件。这称为事件冒泡。这是一段显示如何使用jQuery执行此操作的代码:
// Attach a delegated event handler
$( "#list" ).on( "click", "a", function( event ) {
f();
});
您将点击事件直接绑定到&#34; #List&#34;,作为父母并告诉它专门侦听来自&#34; a&#34;元素,在第二个参数中定义。