jQuery中是否有onAvailable()函数?

在将新的html插入DOM之后,我需要添加一些监听器。

但新元素不能立刻获得。

我的代码:

$('#loader').clone().removeAttr('id').load("Views/chatBox.html").appendTo('body'); $('#chat') .focus(function() { $(this).addClass('jV'); }) .blur(function() { $('#chat').removeClass('jV'); }); 

哪个不行。

使用live()仍然无法正常工作:

 $('#chat').live('focus',function() { $('#chat').addClass('jV'); }) .live('blur',function() { $('#chat').removeClass('jV'); }); 

如果#chat位于您正在加载的chatBox.html中,那么您可以利用加载的回调:

 $('#loader').clone().removeAttr('id').load("Views/chatBox.html",function(){ $('#chat').focus(function() { $(this).addClass('jV'); }) .blur(function() { $('#chat').removeClass('jV'); }); }).appendTo('body'); 

http://docs.jquery.com/Ajax/load#urldatacallback

请改用jQuery.live()live()将在创建元素时绑定事件处理程序。 它需要jQuery 1.3+。

编辑:看起来聊天div可能尚未加载,所以这仍然是个问题。 我建议你稍微改变你的计划。 首先,在您的文档中有一个所有聊天区域:

 

然后你有:

 $(function() { $("#chat div.chat").live("focus", function() { $(this).addClass("jV"); }).live("blur", function() { $(this).removeClass("jV"); }); }); 

这里的不同之处在于,您正在向聊天区域(具有聊天ID)添加带有聊天类别的div。 然后你只需:

 $('#loader').clone().removeAttr('id').load("Views/chatBox.html").appendTo('#chat'); 

如果要将侦听器添加到动态创建的新HTML / DOM元素的元素中,则可以将事件附加到使用任何适当的jQuery事件处理程序创建时创建的元素。

如果外部加载的内容存在问题(如脚本/图像),请对这些元素使用.load()jQuery事件处理程序,以检测它们何时在DOM中可用并且可以进行操作。

正如另一张海报所提到的,.live()也可以工作,但如果您自己控制元素创建则可能不需要 – .live()会增加一些可能过度的开销。

Livequery会做你想要的。 它会

“即使在加载页面并更新DOM之后,也会自动神奇地绑定事件或触发匹配元素的回调。”