2010-11-25 49 views
2

我正在發出返回表中元素的ajax請求。這一切都很好,它顯示正常。不過,我會注意到附加表中包含的東西,像這樣Ajax返回的html似乎無法識別適用於它的javascript函數

<div id="myId">Some Text</div> 

不會被結合到身份識別碼的方法,像這樣前面的JavaScript方法綁定的所有元素:

$("#myID").click(function() { alert("HI!") }; 

它在調用ajax之前加載的任何東西都能很好地工作,但如果它是由ajax填充的html,那麼由於某些原因,這些標記沒有意識到他們應該聽取點擊。

任何人都有這方面的見解。我使用jQuery爲它的價值

回答

6

使用live,像這樣:

$("#myID").live('click', function() { alert("HI!"); }); 

live結合當前和未來元素的處理程序; click只適用於目前的。

+1

執行此操作的新方法是`.on()`,如[jQuery](http://api.jquery.com/on/)和[this]中所述(http://stackoverflow.com/questions/9344306/jquery-click-doesnt-work-on-ajax-generated-content)question/answer here。 – 2017-03-26 03:13:30

2

您的問題來自.click()僅將您的處理程序綁定到與選擇器匹配的現有元素。您需要使用.live().delegate(),這會將您的處理程序綁定到現在以及將來存在的元素。爲簡單起見,讓我們一起去.live()

$("#myID").live("click", function() { 
    alert("Hi!"); 
}); 

「它是如何工作的?」你可能會問。那麼,.live()實際上會將您的處理程序綁定到指定事件document。然後,它監視指定的事件,因爲它會讓DOM膨脹起來。當它到達document時,它會檢查事件發生的位置,如果它來自與選擇器匹配的元素,則處理程序觸發。

.delegate()以非常相同的方式工作,除了它將處理程序綁定到您指定的元素$(),並且作爲參數,它需要一個選擇器。然後它會監視事件,並且當它跳到$()中指定的元素時,它會檢查事件是否來自您指定的元素作爲第一個參數,如果是,則會觸發您的處理程序。

相關問題