2010-12-19 219 views
1

我正在使用jQuery和ajax。jquery和ajax问题

我有一些的div像ID = “苹果-23” 的ID,ID = “苹果-45” 和...

我有一些jQuery代码是这样的:

$("[id^=apple]").click(function(){ 
    elid = $(this).attr('id').split("-"); 
    pid = elid[1]; 
    alert(pid); 
}); 

的代码适用于这些div。

但ajax也返回类似的ID模式,如ID =“苹果61”等 类似的div,但jQuery代码不适用于这些AJAX生产的div。

为什么这样呢?我该如何解决它?

+0

您是否有这些div的共同父项? – sje397 2010-12-19 06:20:27

回答

3

您可以使用.delegate().live()处理上还不存在的元素的事件。

如果这些div具有共同父项,则使用.delegate()而不是.live()(请参阅here)更有效。

$("#divContainer").delegate("[id^=apple]", "click", function(){ 
    elid = $(this).attr('id').split("-"); 
    pid = elid[1]; 
    alert(pid); 
}); 
+0

所以如果我有他们的父母使用委托()比live()更快,因为活附加到文档和检查整个文档来检测匹配的元素,但委托()只检查一些特定的元素来找到匹配的元素附加event.is是正确的? – 2010-12-19 06:45:18

+0

@hd:是的,这就是我的理解。从那个链接中,'delegate'实际上调用'live',但是将它的范围限制在容器中,而它自己的'live'只是代表文档。 – sje397 2010-12-19 06:49:07

5

问题是,您在元素存在之前绑定事件。

使用live代替(假设你正在使用jQuery 1.3+):

$("[id^=apple]").live("click", function(){ 
    elid = $(this).attr('id').split("-"); 
    pid = elid[1]; 
    alert(pid); 
});