我正在制作一个返回表中元素的ajax请求。一切都很好,它显示正常。但是,我注意到附加到表的任何元素都包含类似的内容
<div id="myId">Some Text</div>
不受以前绑定到myId方法的javascript方法的约束:
$("#myID").click(function() { alert("HI!") };
它适用于调用ajax之前加载的任何内容,但如果它是由ajax填充的html,那么由于某些原因,这些标记没有意识到他们应该监听点击。
任何人都对此有任何见解。我正在使用JQuery来实现它的价值
答案 0 :(得分:6)
使用live,如下所示:
$("#myID").live('click', function() { alert("HI!"); });
live
绑定当前和将来元素的处理程序; click
仅适用于当前版本。
答案 1 :(得分:2)
您的问题来自于.click()
仅将您的处理程序绑定到与选择器匹配的现有元素。您需要使用.live()
或.delegate()
,它会将您的处理程序绑定到现在以及将来存在的元素。为简单起见,我们选择.live()
:
$("#myID").live("click", function() {
alert("Hi!");
});
“它是如何运作的?”你可能会问。好吧,.live()
实际上将您的处理程序绑定到指定的事件document
。然后它会监视指定的事件,因为它会冒泡DOM。当它到达document
时,它会检查事件的起源位置,如果它来自与您的选择器匹配的元素,则处理程序将触发。
.delegate()
的工作方式大致相同,只是它将处理程序绑定到您指定给$()
的元素,并且作为参数,它需要一个选择器。然后它监视事件,当它冒泡到$()
中指定的元素时,它会检查事件是否源自您指定为第一个参数的元素,如果是,则处理程序将触发。
答案 2 :(得分:0)
另一种实现此目的的方法是将其更改为
$(document).on('click', '#myID', function() { });