2012-06-12 14 views
8

La documentazione jQuery a http://api.jquery.com/on/ menzionano i benefici di delegati-eventi utilizzando la seguente sintassi (che attribuisce un gestore di eventi per un solo elemento):sintassi jQuery per più eventi delegati

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

Ma non riesco a trovare qualsiasi riferimento alla sintassi corretta per il collegamento di più eventi contemporaneamente con eventi delegati. Esiste una scorciatoia per quanto segue, ma con tr.hoverable come evento delegato?

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

O è questo l'unica soluzione ...

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

?

+0

Guarda di nuovo l'API ... la seconda versione del metodo è quella che desideri. –

risposta

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

As per this signature:

.on (eventi-map [, selettore] [i dati])

Inoltre, preferiscono singoli selettori tagName/className/id per la delega in quanto Ottimizza

+0

Sì, questo è quello che stavo cercando :) Potresti chiarire il tuo commento "preferisci tag singolo nome/..."? Non capisco :) – neokio

+0

@neokio Ho sbagliato in questo caso dato che 'quickParse' fornisce comunque risultati per' "tr.hoverable" 'sebbene non per' ".class1.class2" '. È solo una punta laterale. Per spiegare come funziona la delega degli eventi è troppo per un commento: P – Esailija

+1

Questa è una domanda/risposta più vecchia, ma poiché mi ha aiutato, ho pensato di offrire alcuni chiarimenti sull'ultima parte della risposta: selettori più semplici delegati (' .hoverable') di solito funzionano meglio dei selettori composti (tecnicamente, 'td.hoverable'). Nel caso dell'OP, la differenza è minima e probabilmente necessaria per specificità. Basta stare attenti a cose complesse (e/o non CSS) come 'div + table: has (td.hoverable)' ... poiché richiede jQuery di cercare più volte per gli elementi corrispondenti. – cautionbug