2011-06-06 102 views
1

我想使用.live來確保我的元素響應點擊事件,即使在ajax調用(在我的情況下,我使用$ .post),所以例如後我的ajax請致電我這樣做:

$('.link').live({ 
    click: function() { 
     alert('testing'); 
    } 
}); 

它不起作用。只有當我切換到使用這樣的正常點擊事件:

$('.link').click(function() { 
    alert('testing); 
} 

它的工作原理。但事情是$ link只有在每個ajax調用後纔出現給用戶,並且是實際進行ajax調用的用戶。因此,如果我使用正常的點擊事件,它只會在第一次顯示$ link的第一個ajax調用(我在第一個ajax調用之後綁定事件)後纔會工作。

首次顯示$ link後,用戶首次點擊後,它會在底部再次顯示包含$ link的項目列表。但是,這次它不再工作了,因爲我仍然只綁定click事件而不使用.live。

我該如何讓.live工程,這將使鏈接每次點擊N次後工作?

編輯:更改$列表以使用選擇器。對於以前不清楚的信息抱歉。我實際上使用選擇器來使用.live。我實際上試圖提供'查看更多'功能。因此,在用戶在文本框中輸入內容後,搜索結果將顯示(通過ajax),並在底部顯示「查看更多」鏈接。當用戶點擊它時,更多的相關搜索結果將被添加到列表中,另一個「查看更多」鏈接將再次位於列表的底部。但是,這一次它不再工作了,因爲我無法使用.live來處理它。

+0

明顯的問題 - 但我想你已經檢查過的jQuery的版本? .live版本僅適用於1.4.3及更高版本 – Prescott 2011-06-06 01:00:40

+1

您能向我們展示如何獲得$ link的價值嗎? – Steve 2011-06-06 01:01:55

+0

@Prescott我正在使用jQuery 1.6。1目前 – 2011-06-06 01:42:29

回答

0

我用事件冒泡來解決問題。我所做的,而不是使用.live(),我這樣做:( 'linkParent ')

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

    $tgt = $(event.target); 

    if ($tgt.attr('class')=='link') { alert('works now!'); } 

}); 

這樣$(' 鏈接')始終是內部$和Ajax調用總是隻加載$('。linkParent')中的內容。

+0

這就是'delegate'方法的作用,它是'live'方法的變體。如果可行,「live」或「delegate」也可以。 – Guffa 2011-06-06 12:36:34

0

您在指定live委託時使用選擇器。例如:

$('.SomeClass').live(... 

這會將事件綁定到文檔,它將檢查事件的來源。如果原點匹配選擇器,則會觸發事件處理程序。

您必須在綁定live委託時使用選擇器,不能使用任何其他遍歷DOM的方法來查找元素,因爲在事件發生時評估選擇器,而不是委託綁定時。

+0

對不起,我不清楚的問題。編輯我的原始問題,使其更清晰 – 2011-06-06 01:49:15

1

,您可以嘗試像我總是做這樣:

$(".class").live("click", function() { 
    //Do something 
});