2010-05-11 50 views
0

我使用jQuery​​函數來拉入數據以填充div。我拉入的內容有CSS選擇器,應該與我寫的jQuery點擊函數相匹配。但是,當我加載數據時,雖然有正確的CSS選擇器,但當我點擊應該從jQuery調用響應的區域時,什麼都不會發生。通過jQuery AJAX插入的內容不與以前的函數關聯

我需要做某種重新加載嗎?

下面是我得到了jQuery的AJAX代碼:

$(document).ready(function() { 
// AJAX functionality for drupal nodes 
$(".ajax_node").click(function() { 
    var ajax_src = $(this).attr("href"); // we're gonna load the href 

    // empty target div and load in content 
    // the space in the string before the #id is necessary 
    $("#ajax_area").empty().load(ajax_src + " #ajax_wrapper"); 
    return false; // stops the link from following through 
}); 

// General AJAX functionality 
$(".ajax").click(function() { 
    var ajax_src = $(this).attr("href"); 
    $("#ajax_area").empty().load(ajax_src); 
    return false; 
}); 
}); 

回答

1

代替此格式:

$(".ajax_node").click(function() { 

使用.live()當前和未來的元素,像這樣:

$(".ajax_node").live('click', function() { 

的原因:.live()偵聽事件冒泡的DOM根目錄或document。這是一個綁定在那裏的單個事件處理程序......添加元素時無關緊要,當點擊到達時,它們都會一樣冒泡:它檢查選擇器,如果它匹配,則運行處理器。

爲什麼你當前的方法不起作用:它找到所有匹配那個選擇器的元素當時和綁定處理程序......新元素不在那裏,所以不要那個處理程序。您有2個選項來解決這個問題,要麼使用.live()如上所述,或者處理器到選擇重新綁定的請求的內容,這樣,以不同的方式,其工作原理:

function callback(data) { //your success callback, e.g. .load(url, callback) 
    $(".ajax_node", data).click(myFunction); 
} 

在你例如,我認爲.live()要容易得多,你通常會用小部件等來做第二件事,而不是嚴格的事件處理程序......但不管漂浮在你的船上。

4

它不工作,因爲你基本上重新創建的元素,當你通過load拉他們,你需要重新綁定的事件處理程序。我建議使用jQuery's live binding