2010-12-19 167 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); 
});