2012-07-27 28 views
0

我製成像一個jquery代碼:如何在jQuery中的另一個Ajax內使用ajax?

$('button').click(function(event) { 

}); 

在它;我把$.post併發送數據到一個php文件並返回表格行。在每一行中都有一個「添加」按鈕。

然後我又jQuery代碼爲這些按鈕,如:

$('.row_button').click(function(event) { 

}); 

同樣,我把$.post,並試圖發送關於該行的數據,並希望通過獲取Ajax請求的信息。但它沒有奏效。什麼都沒有發生。我看了代碼,沒有錯誤。

是不是可以在另一個Ajax中使用ajax?還是有另一種方式?謝謝。

+1

沒有「ajax在另一個ajax」之類的東西。當你在第一個.ajax調用的成功回調中,你不再是第一個.ajax。 「ajax」中的「a」代表「異步」。 – 2012-07-27 14:02:11

+0

也許如果我們看看它是如何的你的HTML標記和我們可以幫助你的完全功能 – Jorge 2012-07-27 14:02:29

回答

7

這是因爲那些新注入的元素不知道你已經擁有的點擊事件綁定。

解決方案:使用jquery on函數。

變化

$('.row_button').click(function(event) { 

}); 

$(document).on("click",".row_button'",function(event) { 

}); 

的jQuery on作品爲當前和未來元件(經由ajax /動態地添加使用javascript新元素新注入的元素)。它可以從jQuery 1.7+版本獲得。如果您使用的是早期版本的jQuery,請考慮使用jquery live (從jQuery 1.7開始,.live()方法已棄用)

+0

這。這是對的。 – Ohgodwhy 2012-07-27 14:03:45

+0

舊版本應該使用'.delegate()',而不是'.live()'。我會更新你的答案,建議使用它來代替。 – 2012-07-27 14:08:09

+0

是的。謝謝您的回覆。 – kalaba2003 2012-07-27 14:08:09

3

嘗試使用這個代替第二代碼:

$('.row_button').live('click',function(event) { 
    ... 
}); 

Jquery .live附加的事件處理程序的當前選擇現在和將來匹配這,所有的元素。


編輯

.live現在deprected所以使用.on insted的:

$(document).on("click",".row_button'",function(event) { 

}); 

從jQuery的文檔:

$(selector).live(events, data, handler);    // jQuery 1.3+ 
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ 
$(document).on(events, selector, data, handler);  // jQuery 1.7+ 
+0

這裏的實時功能不會將事件委託給靜態容器。 「行按鈕」在ajax調用中傳播。你認爲在這裏使用'live'會達到什麼目的? – Ohgodwhy 2012-07-27 14:03:19

+1

改用'delegate':http://stackoverflow.com/questions/4579117/jquery-live-vs-delegate – 2012-07-27 14:03:26

+0

@Ohgodwhy'。live()'**不會**委託事件,這是他們想要的。它與'$(document).on('click','.row_button',function(){...});'或$(document).delegate('。row_button','click' ,function(){...}):',但也恰好被棄用。 – 2012-07-27 14:05:58

相關問題