2011-12-22 9 views
108

Tratando de averiguar cómo usar el método Jquery .on() con un selector específico que tiene múltiples eventos asociados. Anteriormente estaba usando el método .live(), pero no estoy muy seguro de cómo lograr la misma proeza con .on(). Por favor, vea mi código de abajo:Método JQuery .on() con múltiples controladores de eventos para un selector

$("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. 
    } 
}); 

Sé que puedo asignar los múltiples eventos llamando al:

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

Pero creo que el uso adecuado de .on() sería así:

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

¿Hay alguna manera de lograr esto? ¿O cuál es la mejor práctica aquí? Probé el código a continuación, pero no dados.

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

¡Gracias de antemano!

Respuesta

211

Eso es the other way around. Usted debe escribir:

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

Why ¿No es el selector '$ (" table.planning_grid td ")'? – Muers

+10

@Muers, también funcionaría y el interlocutor lo reconoce, pero también cree que debería vincular el evento en el '

' en lugar de cada elemento '
' individual, que de hecho es el camino correcto. –

+0

@Frederic - ¡Muchas gracias! Eso es exactamente lo que estaba buscando. – butangphp

142

Además, si tuviera múltiples controladores de eventos conectados al mismo selector de ejecución de la misma función, se puede utilizar

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

esto es lo que estaba buscando – RozzA

+1

¿por qué esto no funciona con 'blur' y' change' ??? – Wilf

6

Y puede combinar mismos eventos/funciones de este modo :

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

Aprendí algo realmente útil y fundamental de here.

encadenamiento funciones es muy útil en este caso, que funciona en la mayoría de las funciones de jQuery incluyendo en salida de la función también.

Funciona porque la salida de la mayoría de las funciones de jQuery son los objetos de entrada conjuntos para que pueda utilizarlos de inmediato y hacerla más corta y más inteligente

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

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

Pruebe con el siguiente código:

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

    } 
); 
6

Si desea utilizar la misma función en diferentes eventos, puede usar el siguiente bloque de código

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