2009-02-04 11 views
16

tengo un elemento de entrada, y quiero vincular tanto el cambio como el evento de pulsación con la entrada, pero el código de manejo de eventos es el mismo para ambos eventos. ¿Hay alguna forma de hacer esto en lugar de escribir el mismo código dos veces? Bueno, podría escribir un método, pero quería ver si hay alguna manera más fácil de hacer estoconectando el mismo código de manejo de eventos a múltiples eventos en jquery

$("#inpt").change(function(){ 
    some code 
}); 

$("#inpt").keypress(function(){ 
    same code 
}); 

¿Hay alguna manera puedo unir ambos eventos?

Respuesta

39

Puede utilizar el método de jQuery en.

$("#inpt").on("change keypress", function() { 
    code 
}); 
+1

gracias, eso es lo que estaba buscando. –

+0

Según jquery [docs] (http://api.jquery.com/bind/), "A partir de jQuery 1.7, el método .on() es el método preferido para adjuntar controladores de eventos a un documento." Por lo tanto, para versiones más recientes que 1.7 usaría '$ (" # inpt "). On (" change keypress ", function() { código });' – jbustamovej

+0

@jbustamovej Lo he actualizado. – tvanfosson

6

Puede guardar la función y enlazarlo a la vez:

var fn = function(){ /*some code*/ }; 
$("#inpt").change(fn).keypress(fn); 
1

También puede utilizar el evento 'en vivo' en lugar del 'unen' uno sugested. El evento 'en vivo' cubrirá incluso los elementos creados dinámicos. (en desuso en 1.7)

Kaless1n y Mateo, que se unen a múltiples elementos de utilizar el "Atributo comienza con selector":

var fn = function() { /*some code*/ }; 

$('input[id^="foo_"]').click(fn).keyup(fn).keydown(fn); 

que se unirá a todos los elementos 'input', donde comienza el 'id' con 'foo_'. Puede cambiar la 'entrada' a cualquier otro elemento y/o 'id' con el atributo 'nombre', por ejemplo.

Cuestiones relacionadas