2014-12-04 69 views
0

我試圖選擇一個基於它的類的元素(使用$(「。class」)),我有一個問題,我不知道爲什麼會發生。JQuery類選擇器不工作

首先,元素是圖像。它通過執行一個函數時創建:

$("#container").append("<img class='removeIcon' src='images/remove.png' remove='"+$(this).val()+"' />"); 

這是可行的。當功能被觸發時,圖像被添加,甚至多次。而每個人的價值就是它的意義,這一切都很好。元素很好。

什麼是不工作...

$(".removeIcon").click(function() { 
    alert(); 
    console.log("Clicked!"); 
}); 

我不知道,如果它不工作,因爲圖像後來加入,或者也許我做錯了什麼?但是,每當我點擊該類中的任何圖像時,都沒有提示對話框,也沒有控制檯日誌。我已經鍵入,到控制檯,$(「。removeIcon」); - 它顯示了這個類的所有圖像,所以我不明白什麼是錯的。即使在類選擇器上,您是否還能點擊?

提前致謝!

+0

使用jQuery的()方法 – 2014-12-04 04:09:16

回答

7

您的代碼僅適用於現有的.removeIcon元素。

如果您添加動態元素,儘量使用.on

$("#container").on('click', '.removeIcon', function() { 
    alert(); 
    console.log("Clicked!"); 
}); 

其上的所有.removeIcon元素結合內部#container (包括動態添加的元素)click事件

+0

捕獲由DOM或者通過的onclick功能單擊事件那麼幾個解釋會更好,所以加上它。當你添加動態元素時,他們不會「重新觸發」文檔的onload調用,因此通常會像你不執行一樣調用。這是'on'有用的地方。 – 2014-12-04 03:58:51

+0

我還會提及[Event Delegation](http://learn.jquery.com/events/event-delegation/),不僅僅是'.on',因爲它涉及動態創建的元素。 – ekad 2014-12-04 04:00:12

+0

工作完美,謝謝!我會在幾分鐘內接受SO的答案。 – 2014-12-04 04:06:27

2

是的,問題是,它是稍後添加,因此您必須使用以下代碼:

$("#container").on('click', '.removeIcon', function() { 
    alert(); 
    console.log("Clicked!"); 
}); 

因此,該事件將被命名爲貨櫃,但將採取行動.removeIcon項目。

欲瞭解更多信息,請查看jQuery的on function

1

click()函數不適用於動態加載的數據。 你有

通過DOM

$("#container").on('click', '.removeIcon', function() { console.log("click"); });

OR的onclick功能

$("#container").append("<img class='removeIcon' onclick="somefunctionInJS()" src='images/remove.png' remove='"+$(this).val()+"' />");