2012-01-21 37 views
0

我有一個通過$ .load()加載的dom對象。然後我有點擊函數連接到被加載的對象。如何獲取通過AJAX加載的DOM對象來觸發附加到新DOM對象的jQuery

點擊函數不會觸發新的DOM對象。

我錯過了什麼?

沒有在.cntrls a點擊功能正在發射。

這裏有一個例子:

$('.ati a').click(function() { 

    // First, clear out the current content 
    if ('.msg-obj' || '.poc-obj' || '.pom-obj || .cntrls') { 
     $('.msg-obj, .poc-obj, .pom-obj, .cntrls').hide(); 
    }; 

    // Get the URL for the object that is clicked 
    var clickedObjPath = $(this).attr('href'); 

    console.log(clickedObjPath); 

    $('#msg').load(clickedObjPath + ' .msg-obj').fadeIn(); 
    $('.poc').load(clickedObjPath + ' .poc-obj').fadeIn(); 
    $('.pom').load(clickedObjPath + ' .pom-obj').fadeIn(); 
    $('.cntrls').load(clickedObjPath + ' .cntrls a').fadeIn(); 

    return false; 
}); 


$('.cntrls a ').click(function() { 

    // Get the URL for the object that is clicked 
    var cntrlObjPath = $(this).attr('href'); 
    console.log(cntrlObjPath); 

    return false; 

}); 

回答

2

如果你安裝了單擊處理的對象實際上是在頁面存在之前,他們不會,除非你使用委派事件處理工作。該代碼將查找所需的對象來掛接其事件處理程序,並且不會找到它,因此沒有任何東西會被連接起來。

在1.7之前的jQuery中,您將使用.delegate(),而在jQuery 1.7+中,您將在安裝點擊處理程序時存在的父對象上使用.on()

使用.on()(jQuery的1.7+),你會做這樣的:

$(document.body).on('click', '.ati a', function() {...}); 

理想情況下,你會選擇那是比身體的對象更接近實際的對象,並在存在父對象你安裝點擊處理程序的時間,但你沒有包含任何你的HTML,所以我不知道除了body之外還應該選擇什麼。

預jQuery的1.7語法將是這樣的:

$(document.body).delegate('.ati a', 'click', function() {...}); 

舊的方式來做到這一點是使用.live(),但已過時的jQuery的所有版本和他們建議.delegate()預的jQuery 1.7或用於jQuery 1.7+的.on()

+0

就是這樣!謝謝您的幫助。我用.on() - 工作完美。 –

0

試試現場活動綁定$(「a」)。live(.....)在jq文檔中