2015-02-11 44 views
1

我試圖將事件處理程序分配給將在各個點上動態創建的一堆類,並以高效的方式這樣做。使用.each()爲多個類指定.click()

我想我可以創建一個鍵值對的列表,將類作爲鍵和函數作爲值,然後執行.each()循環將事件處理程序分配給容器元素(在本例中爲' 。面板')。但是,這會導致頁面加載時調用所有函數。任何想法是什麼問題?

var functionList = { 
         '.name': nameChange(), 
         '.email': sendEmail(), 
         '.notes': editNotes()     
    }; 

$.each(functionList, function(k,v) {  
    $('.panel').on('click',k,v) 
}); 

更新:我改變了。點擊()來。對(「點擊」),用於透明度(和問題仍然存在)

+0

我不認爲會有所作爲,因爲。點擊()等價於。對(「點擊」) – BarthesSimpson 2015-02-11 19:19:50

+0

但我已經有我的。​​點擊內部事件委託()。這就是「k」選擇器的用途 – BarthesSimpson 2015-02-11 19:30:39

+0

所以.panel在頁面加載時是否存在? – j08691 2015-02-11 19:34:02

回答

4

你的問題在於functionList對象的聲明。您正在將每個屬性的值設置爲該函數的值,因爲您實際上正在爲每個屬性調用該函數。嘗試刪除每個值的偏差。

var functionList = { 
    '.name': nameChange, 
    '.email': sendEmail, 
    '.notes': editNotes     
}; 
+0

簡體小提琴http://jsfiddle.net/dyt7vcvk/1/ – Huangism 2015-02-11 19:51:59

0

.on()用於結合上動態添加元素事件。試試這個吧 -

$.each(functionList, function(k,v) {  
    $('.panel').on('click', k, function(){v}) 
}); 
+0

這相當於我的代碼,並具有相同的問題。 – BarthesSimpson 2015-02-11 19:23:42