2011-12-22 11 views
108

Cercando di capire come utilizzare il metodo .on() di Jquery con un selettore specifico a cui sono associati più eventi. In precedenza utilizzavo il metodo .live(), ma non ero sicuro di come ottenere lo stesso risultato con .on(). Si prega di vedere il mio codice qui sotto:Metodo JQuery .on() con più gestori di eventi su un solo selettore

$("table.planning_grid td").live({ 
    mouseenter:function(){ 
    $(this).parent("tr").find("a.delete").show(); 
    }, 
    mouseleave:function(){ 
    $(this).parent("tr").find("a.delete").hide();   
    }, 
    click:function(){ 
    //do something else. 
    } 
}); 

so di poter assegnare i molteplici eventi chiamando:

$("table.planning_grid td").on({ 
    mouseenter:function(){ //see above 
    }, 
    mouseleave:function(){ //see above 
    } 
    click:function(){ //etc 
    } 
    }); 

Ma credo che il corretto utilizzo del .on() sarebbe in questo modo:

$("table.planning_grid").on('mouseenter','td',function(){}); 

C'è un modo per realizzare questo? O qual è la migliore pratica qui? Ho provato il codice qui sotto, ma senza dadi.

$("table.planning_grid").on('td',{ 
    mouseenter: function(){ /* event1 */ }, 
    mouseleave: function(){ /* event2 */ }, 
    click: function(){ /* event3 */ } 
}); 

Grazie in anticipo!

risposta

211

Questo è the other way around. Si dovrebbe scrivere:

$("table.planning_grid").on({ 
    mouseenter: function() { 
     // Handle mouseenter... 
    }, 
    mouseleave: function() { 
     // Handle mouseleave... 
    }, 
    click: function() { 
     // Handle click... 
    } 
}, "td"); 
+1

Perché non è il selettore '$ (" table.planning_grid td ")'? – Muers

+10

@Muers, funzionerebbe anche e l'interrogante lo riconosce, ma crede anche che dovrebbe associare l'evento allo '

' invece di ogni singolo elemento ''
', che è davvero la strada giusta da percorrere. –

+0

@Frederic - Grazie mille! Questo è esattamente quello che stavo cercando. – butangphp

142

Inoltre, se si ha più gestori di eventi collegati allo stesso selettore di eseguire la stessa funzione, è possibile utilizzare

$('table.planning_grid').on('mouseenter mouseleave', function() { 
    //JS Code 
}); 
+3

questo è quello che stavo cercando – RozzA

+1

perché questo non funziona con 'blur' e' change' ??? – Wilf

6

E si può combinare stessi eventi/funzioni in questo modo :

$("table.planning_grid").on({ 
    mouseenter: function() { 
     // Handle mouseenter... 
    }, 
    mouseleave: function() { 
     // Handle mouseleave... 
    }, 
    'click blur paste' : function() { 
     // Handle click... 
    } 
}, "input"); 
7

Ho imparato qualcosa di veramente utile e fondamentale da here.

concatenamento funzioni è molto utile in questo caso che funziona sulla maggior parte delle funzioni jQuery compresi su uscita funzione troppo.

Funziona perché l'uscita della maggior parte delle funzioni di jQuery sono gli oggetti in ingresso set in modo da poterli utilizzare subito e renderla più breve e più intelligente

function showPhotos() { 
    $(this).find("span").slideToggle(); 
} 

$(".photos") 
    .on("mouseenter", "li", showPhotos) 
    .on("mouseleave", "li", showPhotos); 
1

Prova con il seguente codice:

$("textarea[id^='options_'],input[id^='options_']").on('keyup onmouseout keydown keypress blur change', 
    function() { 

    } 
); 
6

Se si desidera utilizzare la stessa funzione per eventi diversi, è possibile utilizzare il seguente blocco di codice

$('input').on('keyup blur focus', function() { 
    //function block 
}) 
Problemi correlati