jQuery dasselbe Klickereignis für mehrere Elemente


435

Gibt es eine Möglichkeit, denselben Code für verschiedene Elemente auf der Seite auszuführen?

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

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

stattdessen etwas zu tun wie:

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

Vielen Dank

Antworten:


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

Oder:

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

Dies funktioniert auch mit vorhandenen Objekten:

const $class1 = $('.class1');
const $class2 = $('.class2');
$class1.add($class2).on('click', some_function);

11
Damit sich Entwickler daran erinnern können, ist es das gleiche Format wie das Anwenden eines CSS-Selektors beim Definieren von Stilen
— Brett Weber,

8
Was wäre, wenn class2 wie folgt zwischengespeichert worden wäre var class2 = $ (". Class2")?
— Vivek S

18
@NeverBackDown .add()funktioniert auch mit jquery-Objekten
— Eevee

2
Beachten Sie, dass dadurch weiterhin Ereignisse an vorhandene Abfrageobjekte angehängt werden, auch wenn einer der Selektoren undefiniert zurückgibt.
— Ben Sewards

3
Kann jemand erklären, was der wahre Unterschied zwischen $('.class1, .class2')und ist $('.class1').add('.class2')? In welchem ​​Fall sollten wir verwenden .add()?
— Taufik Nur Rahmanda

108

Ich benutze normalerweise onanstelle von click. Dadurch kann ich einer bestimmten Funktion weitere Ereignis-Listener hinzufügen.

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

Ich hoffe es hilft!


1
Ich mag diesen Weg besser. Aber können Sie ein Element nach Klasse und eines nach ID in derselben Deklaration als Ziel festlegen? Zum Beispiel $ (document) .on ("click touchend", ".class1, # id1, .class3", function () {// do stuff});
— Gaurav Ojha

3
ein Jahr später: Ja, das kannst du! @ GauravOjha
— Obed Marquez Parlapiano

3
Diese Technik - das Erstellen eines delegierten Handlers anstelle eines direkten Handlers - bietet auch den einzigartigen Vorteil, Ereignisse zu behandeln, die durch übereinstimmende Elemente ausgelöst werden, die nach der Registrierung des Handlers erstellt wurden. Siehe: api.jquery.com/on
— Jonathan Lidbeck

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

Stellen Sie sicher, dass Sie ein Leerzeichen wie $ ('. Class1, space here.class2') einfügen, da dies sonst nicht funktioniert.


17

Einfach $('.myclass1, .myclass2, .myclass3')für mehrere Selektoren verwenden. Außerdem benötigen Sie keine Lambda-Funktionen, um eine vorhandene Funktion an das Klickereignis zu binden.


7
Sie brauchen ein Leerzeichen nach den Kommas
— Maurizio In Dänemark

10

Eine weitere Alternative, vorausgesetzt, Ihre Elemente werden als Variablen gespeichert (was häufig eine gute Idee ist, wenn Sie in einem Funktionskörper mehrmals darauf zugreifen):

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

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

Nutzt die jQuery-Verkettung und ermöglicht die Verwendung von Referenzen.


4

Wenn Sie Ihre Elemente als Variablen (jQuery-Objekte) haben oder behalten möchten, können Sie sie auch durchlaufen:

var $class1 = $('.class1');
var $class2 = $('.class2');

$([$class1,$class2]).each(function() {
    $(this).on('click', function(e) {
        some_function();
    });
});

3

Fügen Sie eine durch Kommas getrennte Liste von Klassen wie folgt hinzu:

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

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

//  Your code

    }

});

2

Wir können auch wie folgt codieren, ich habe hier ein Unschärfeereignis verwendet.

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

1

Ich habe einen Link zu einem Objekt, das viele Eingabefelder enthält, die von demselben Ereignis behandelt werden müssen. Also benutze ich einfach find () , um alle inneren Objekte zu erhalten, die das Ereignis haben müssen

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

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

Falls Ihre Objekte sind eine Ebene nach unten den Link Kinder () statt finden () Methode verwendet werden kann.


1

Zusätzlich zu den oben aufgeführten hervorragenden Beispielen und Antworten können Sie mithilfe ihrer Klassen auch zwei verschiedene Elemente "finden". Zum Beispiel:

<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>

Dies sollte "HelloWorld" ausgeben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.