2012-06-12 83 views
8

http://api.jquery.com/on/ jQuery的文檔提到使用下面的語法(其中附加的事件處理程序只有一個元素)委派事件的好處:jQuery的語法多重委託事件

$('#mytable').on('click', 'tr.hoverable', function(){ 
    // blah 
}); 

但我無法找到對委託事件一次附加多個事件的正確語法的任何引用。是否有以下的快捷方式,但是tr.hoverable作爲委託事件?

$('#mytable tr.hoverable').on({ 
    mouseenter: function(){ 
     // blah 
    }, 
    mouseleave: function(){ 
     // blah 
    }, 
    click: function(){ 
     // blah 
    } 
}); 

或者這是唯一的解決辦法...

$('#mytable').on('click', 'tr.hoverable', function(){ 
    // blah 
}).on('mouseenter', 'tr.hoverable', function(){ 
    // blah 
}).on('mouseleave', 'tr.hoverable', function(){ 
    // blah 
}); 

+0

再次看看API ...該方法的第二個版本是你想要的。 –

回答

10
$('#mytable').on({ 
    mouseenter: function(){ 
     // blah 
    }, 
    mouseleave: function(){ 
     // blah 
    }, 
    click: function(){ 
     // blah 
    } 
}, '.hoverable'); 

As per this signature

。對(事件映射[,選擇器] [,數據])

另外,喜歡單個的tagName /類名/ id選擇進行委派,因爲它們得到優化

+0

是的,這就是我正在尋找:) 你能否澄清你的'喜歡單個tagName/...'評論?我不明白:) – neokio

+0

@neokio在這種情況下,我錯了,因爲'quickParse'仍然給出了「tr.hoverable」的結果,儘管不是'「.class1.class2」'。這只是一個小費。解釋事件代表團如何工作對於一個評論來說太過分了:P – Esailija

+1

這是一個較老的問題/答案,但是因爲它幫助了我,所以我認爲我會對答案的最後部分進行一些說明:更簡單的委派選擇器(' .hoverable')通常比複合選擇器更好(技術上講,'td.hoverable')。在OP的情況下,差異是最小的,可能是特異性所必需的。只需要警惕諸如'div + table:has(td.hoverable)'...之類的複雜(和/或非CSS)東西......因爲它需要jQuery多次尋找匹配的元素。 – cautionbug