我有一些代碼動態地將鏈接添加到DOM並將偵聽器添加到每個偵聽器。我遇到的問題是每次點擊其中一個鏈接時,所有的處理程序都會觸發。我試圖解決這個問題,結果總是或者我根本得不到任何答覆(就好像聽衆從未分配過)。困惑於jquery偵聽器如何工作
所以我只是通過做一些我不認爲有效的事情來解決問題。我將偵聽器分配給被動態添加的元素的id(而不是將其分配給已經在DOM中的父元素)。我認爲這是不可能的,因爲監聽器必須位於已經在DOM中的元素上?
更令人困惑的是,我正在玩jsfiddle中的一些非常類似的代碼,其結果與我所得到的結果大致相反。當我遇到問題時,它運行良好,當我解決了我的問題時,解決方案無法在jsfiddle中運行!
所以這裏是我的工作代碼。只需要更多的背景信息 - 我正在使用Firebase,並且每次在數據庫中發生child_added事件時(或者當用戶登錄時,該列表將填充數據庫中已有的所有條目)將添加這些li元素。
var songName = songSnapshot.name();
$(listSelector).append("<li id='" + songName + "'><a href='#'>" + songName + "</a></li>");
$("#" + songName).on("click", function(event) {
event.preventDefault();
var clickedSong = $(this).text();
loadCheck(clickedSong);
});
而這裏的HTML:
<ul class="six columns" id="dropdowns">
<li><a href="#" id="createsong">Create New Song</a></li>
<li>
<a href="#">Your Songs</a>
<div class="dropdown">
<ul id="userSonglist">
</ul>
</div>
</li>
<li>
<a href="#">All Songs</a>
<div class="dropdown">
<ul id="publicSonglist">
</ul>
</div>
</li>
</ul>
任何想法是怎麼回事,這是爲什麼工作?我對jquery聽衆的理解是不正確的嗎?我花了幾乎整整一天的時間在jquery.com和其他網站上研究這一點,但這仍然讓我感到困惑。我其實只是在jsfiddle中試過這段代碼,並且它工作正常。所以顯然我錯過了/誤解了一些東西。
看看這裏:http://jqfundamentals.com/chapter/events –
請記住,你不能聽的東西尚不存在。但是,如果有任何孩子出現,你可以聽它的可能父母。 ('click','.item',function(event){...});' –
@A。沃爾夫2 - 看事件委派有 –