2009-08-21 11 views
323

¿Hay alguna forma de ejecutar el mismo código para diferentes elementos en la página?jQuery mismo evento de clic para elementos múltiples

$('.class1').click(function() { 
    some_function(); 
}); 

$('.class2').click(function() { 
    some_function(); 
}); 

en vez de hacer algo como:

$('.class1').$('.class2').click(function() { 
    some_function(); 
}); 

Gracias

Respuesta

661
$('.class1, .class2').on('click', some_function); 

O:

$('.class1').add('.class2').on('click', some_function); 
+5

Para ayudar a los desarrolladores tener en cuenta esto, aunque un poco más extendido el uso de más clases psuedo es el mismo formato que la aplicación de un selector CSS al definir estilos –

+3

¿Qué pasaría si class2 en caché como este var class2 = $ (". Class2")? –

+9

@NeverBackDown '.add() 'también funciona con objetos jquery – Eevee

14

simplemente utilizar $('.myclass1, .myclass2, .myclass3') para múltiples selectores. Además, no necesita funciones lambda para vincular una función existente al evento click.

+7

necesita un espacio después de las comas –

30
$('.class1, .class2').click(some_function); 

Asegúrese de poner un espacio como $ ('. Class1, espacio here.class2') de lo contrario no funcionará

69

que normalmente utilizan on en lugar de click. Me permite agregar más oyentes de eventos a una función específica.

$(document).on("click touchend", ".class1, .class2, .class3", function() { 
    //do stuff 
}); 

Espero que ayude!

+1

Me gusta de esta manera mejor. ¿Pero puede orientar un elemento por clase y uno por ID en la misma declaración? Por ej. $ (documento) .on ("haga clic en touchend", ".class1, # id1, .class3", function() { // haga las cosas }); –

+3

un año después: ¡sí, puedes! @GauravOjha –

+1

Esta técnica, al crear un controlador delegado en lugar de directo, también ofrece la ventaja única de manejar eventos activados por elementos coincidentes creados * después de * registrar el controlador. Ver: http://api.jquery.com/on/ –

8

Otra alternativa, suponiendo que sus elementos se almacenan como variables (que a menudo es una buena idea si se está accediendo a múltiples veces en un cuerpo de función):

function disableMinHeight() { 
    var $html = $("html"); 
    var $body = $("body"); 
    var $slideout = $("#slideout"); 

    $html.add($body).add($slideout).css("min-height", 0); 
}; 

se aprovecha de jQuery encadenamiento y que permite para usar referencias

0

Tengo un enlace a un objeto que contiene muchos campos de entrada, que requiere ser manejado por el mismo evento. Por lo tanto, basta con utilizar find() para conseguir todos los objetos en el interior, que necesitan tener el evento

var form = $('<form></form>'); 
// ... apending several input fields 

form.find('input').on('change', onInputChange); 

En caso de que los objetos son un nivel más abajo el enlace niños() lugar Se puede usar el método find().

1

Podemos codificar como los siguientes también, he usado el evento blur aquí.

$("#proprice, #proqty").blur(function(){ 
     var price=$("#proprice").val(); 
     var qty=$("#proqty").val(); 
     if(price != '' || qty != '') 
     { 
      $("#totalprice").val(qty*price); 
     } 
    }); 
0

Además de los excelentes ejemplos y respuestas anteriores, también se puede hacer un "hallazgo" de dos elementos diferentes que utilizan sus clases. Por ejemplo:

<div class="parent"> 
<div class="child1">Hello</div> 
<div class="child2">World</div> 
</div> 

<script> 
var x = jQuery('.parent').find('.child1, .child2').text(); 
console.log(x); 
</script> 

Esto debería generar "HelloWorld".

1

Añadir una lista separada por comas de las clases de la siguiente manera:

jQuery(document).ready(function($) { 

$('.class, .id').click(function() { 

// Your code 

    } 

}); 
Cuestiones relacionadas