Ajax返回html似乎无法识别适用于它的javascript函数

时间:2010-11-25 02:32:49

标签: javascript jquery html ajax

我正在制作一个返回表中元素的ajax请求。一切都很好,它显示正常。但是,我注意到附加到表的任何元素都包含类似的内容

<div id="myId">Some Text</div>

不受以前绑定到myId方法的javascript方法的约束:

$("#myID").click(function() { alert("HI!") };

它适用于调用ajax之前加载的任何内容,但如果它是由ajax填充的html,那么由于某些原因,这些标记没有意识到他们应该监听点击。

任何人都对此有任何见解。我正在使用JQuery来实现它的价值

3 个答案:

答案 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() { });