JQuery одно и то же событие click для нескольких элементов

Есть ли способ выполнить тот же код для разных элементов на странице?

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

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

вместо этого сделать что-то вроде:

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

Спасибо

+389
источник поделиться
10 ответов
$('.class1, .class2').on('click', some_function);

Или же:

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

Это также работает с существующими объектами:

const $class1 = $('.class1');
const $class2 = $('.class2');
$class1.add($class2).on('click', some_function);
+779
источник

Обычно я использую on вместо click. Это позволяет мне добавлять больше слушателей событий к определенной функции.

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

Надеюсь, что это поможет!

+89
источник
другие ответы

Связанные вопросы


Похожие вопросы

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

Убедитесь, что вы поставили пробел, как $ ('. Class1, пробел здесь .class2'), иначе он не будет работать.

+35
источник

Просто используйте $('.myclass1, .myclass2, .myclass3') для нескольких селекторов. Кроме того, вам не нужны лямбда-функции для привязки существующей функции к событию клика.

+15
источник

Другая альтернатива, предполагая, что ваши элементы хранятся как переменные (что часто является хорошей идеей, если вы обращаетесь к ним несколько раз в теле функции):

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

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

Использует преимущества цепочки jQuery и позволяет использовать ссылки.

+9
источник

Добавьте список классов, разделенных запятыми:

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

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

//  Your code

    }

});
+2
источник

Если у вас есть или вы хотите сохранить свои элементы как переменные (объекты jQuery), вы также можете зациклить их:

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

$([$class1,$class2]).each(function() {
    $(this).on('click', function(e) {
        some_function();
    });
});
+2
источник

Мы также можем записать код следующим образом: я использовал здесь размытие.

$("#proprice, #proqty").blur(function(){
      var price=$("#proprice").val();
      var qty=$("#proqty").val();
      if(price != '' || qty != '')
      {
          $("#totalprice").val(qty*price);
      }
  });
+1
источник

У меня есть ссылка на объект, содержащий множество полей ввода, которые требуют обработки одним и тем же событием. Поэтому я просто использую find(), чтобы получить все внутренние объекты, которые должны иметь событие

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

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

Если ваши объекты находятся на одном уровне вниз по ссылке children(), можно использовать метод find().

0
источник

В дополнение к превосходным примерам и ответам выше вы также можете "найти" для двух разных элементов, используя свои классы. Например:

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

Это должно выводить "HelloWorld".

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос