Birden çok öğe için jQuery aynı tıklama etkinliği


435

Sayfadaki farklı öğeler için aynı kodu yürütmenin herhangi bir yolu var mı?

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

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

bunun yerine şöyle bir şey yapmak için:

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

Teşekkürler

Yanıtlar:


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

Veya:

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

Bu aynı zamanda mevcut nesnelerle de çalışır:

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

11
Geliştiricilerin bunu hatırlamasına yardımcı olmak için, daha fazla psuedo sınıfı kullanarak biraz daha genişletilmiş olsa bile, stilleri tanımlarken css seçici uygulamakla aynı formattır
Brett Weber 22:13

8
Class2 bu şekilde önbelleğe alınmış olsaydı, var class2 = $ (". Class2")?
Vivek S

18
@NeverBackDown .add()da jquery nesneleri ile çalışır
Eevee

2
Seçicilerden biri tanımsız dönse bile, bunun varolan jquery nesnelerine yine de olaylar ekleyeceğini unutmayın.
Ben,

3
Biri arasındaki gerçek fark nedir açıklayabilir $('.class1, .class2')ve $('.class1').add('.class2')? hangi durumda kullanmalıyız .add()?
Taufik Nur Rahmanda

108

Normalde onyerine kullanıyorum click. Belirli bir işleve daha fazla olay dinleyicisi eklememe izin veriyor.

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

Umarım yardımcı olur!


1
Bu yolu daha çok seviyorum. Ancak aynı beyanda bir öğeyi sınıf ve diğerini kimliğe göre hedefleyebilir misiniz? Örneğin, $ (document) .on ("tıklama dokunuşu", ".class1, # id1, .class3", function () {// do stuff});
Gaurav Ojha

3
bir yıl sonra: evet, yapabilirsin! @GauravOjha
Obed Marquez Parlapiano

3
Bu teknik - doğrudan işleyici yerine yetki verilen bir oluşturma - işleyiciyi kaydettikten sonra oluşturulan öğelerin eşleştirilmesiyle tetiklenen olayları işlemenin benzersiz avantajını sunar . Bakınız: api.jquery.com/on
Jonathan Lidbeck

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

$ ('. Class1, here.class2') gibi bir boşluk bıraktığınızdan emin olun, aksi takdirde çalışmaz.


17

$('.myclass1, .myclass2, .myclass3')Çoklu seçiciler için kullanın . Ayrıca, varolan bir işlevi click olayına bağlamak için lambda işlevlerine ihtiyacınız yoktur.


7
sonra virgül sonra bir alana ihtiyacınız var
Maurizio Danimarka

10

Öğelerinizin değişkenler olarak depolandığını varsayarak başka bir alternatif (bir işlev gövdesinde bunlara birden çok kez erişiyorsanız genellikle iyi bir fikirdir):

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

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

JQuery zincirlemesinden yararlanır ve referansları kullanmanızı sağlar.


4

Öğelerinizi değişken olarak (jQuery nesneleri) varsa veya saklamak istiyorsanız, bunlar üzerinde de döngü yapabilirsiniz:

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

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

3

Bunun gibi sınıfların virgülle ayrılmış bir listesini ekleyin:

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

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

//  Your code

    }

});

2

Biz de aşağıdaki gibi kodlayabilirsiniz, ben burada bulanıklık olayı kullandık.

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

1

Aynı olay tarafından ele alınması gereken birçok giriş alanı içeren bir nesneye bir bağlantı var. Bu nedenle , olayı olması gereken tüm iç nesneleri almak için find () yöntemini kullanıyorum.

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

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

Nesnelerinizde bir düzey aşağı bağlantı olması durumunda children () yerine find () yöntemi kullanılabilir.


1

Yukarıdaki mükemmel örneklere ve cevaplara ek olarak, sınıflarını kullanarak iki farklı öğe için bir "bulma" da yapabilirsiniz. Örneğin:

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

Bu "HelloWorld" çıktısı almalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.