2013-10-25 19 views
6

所以我有這個jQuery的應用,在那裏我綁定:如何重新綁定jQuery的事件內容通過AJAX下載,而這樣做的每個事件/類

  • 「刪除功能」我的一切」 .btn - 刪除「元素
  • 一個‘附加功能’我的一切」 .btn加」元素

等。在我的webapp的一個div內,我進行異步加載的內容,包括我想要綁定「刪除」和「添加」功能的元素。這些元素也有一個「btn-delete」或「btn-add」類 - 但是由於內容是異步加載的,事件並沒有被綁定到它們,而沒有對它做任何事情。

所以我聽說使用.on('click'...)函數可以在異步加載內容後立即觸發,我可以重新綁定這些函數。但是我必須爲我想要使用的每個功能都做到這一點。我不想要。

我想要的是有一個泛型函數,將所有之前定義的事件函數重新綁定到我將它們加載到的div容器中的每個元素。

有沒有辦法做這樣的事情:

「重新綁定所有事件函數異步加載DIV-ID XYZ中的元素」

它將使我的生活變得更容易,如果我沒有必須手動重新綁定每個函數。

回答

16

如果您使用委託事件處理,您的永不必須重新綁定。

$('body').on('click', '.btn-delete', function(ev) { 
    // delete ... 
}); 

設置了一個事件處理程序,它在任何時候從任何元素冒泡到正文時捕獲「click」事件。它會對與給定選擇器匹配的元素進行任何「單擊」操作。無論原來的按鈕還是動態添加按鈕都無關緊要。

您不必將處理程序放在<body>元素上;他們可以去任何一層容器。

+2

它不會影響性能嗎? –

+2

@HamedMomeni不,對委派的事件處理程序沒有任何有意義的性能問題。選擇器只需要一次針對一個DOM元素進行測試。 – Pointy

相關問題