jQuery однакова подія клацання для декількох елементів


435

Чи є спосіб виконати один і той же код для різних елементів на сторінці?

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

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

замість цього зробити щось на кшталт:

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

Дякую

Відповіді:


866
$('.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);

11
Щоб допомогти розробникам запам’ятати це, навіть якщо трохи більше розширено, використовуючи більше класів psuedo, це той самий формат, що й застосування селектора css при визначенні стилів
Бретт Вебер

8
Що робити, якщо клас2 кеширувався як цей var class2 = $ (". Class2")?
Vivek S

18
@NeverBackDown теж .add()працює з об’єктами jquery
Eevee

2
Зауважте, що це все ще додасть події до об'єктів jquery, які існують, навіть якщо один із селекторів повертається невизначеним.
Бен Сьюардс

3
хтось може пояснити, яка реальна різниця між $('.class1, .class2')і $('.class1').add('.class2')? в якому випадку ми повинні використовувати .add()?
Тауфік Нур Рахманда

108

Я зазвичай використовую onзамість цього click. Це дозволяє мені додати більше слухачів подій до певної функції.

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

Сподіваюся, це допомагає!


1
Мені це подобається краще. Але чи можете ви орієнтуватися на один елемент по класу та один за ідентифікатором в одній декларації? Наприклад, $ (document) .on ("натисніть на дотик", ".class1, # id1, .class3", function () {// do stuff});
Gaurav Ojha

3
через рік: так, можна! @GauravOjha
Marquez Parlapiano

3
Цей прийом - створення делегованого, а не прямого обробника - також пропонує унікальну перевагу обробки подій, викликаних відповідними елементами, створеними після реєстрації обробника. Дивіться: api.jquery.com/on
Джонатан Лідбек

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

Переконайтеся, що ви розмістили простір на зразок $ ('. Class1, space here.class2'), інакше він не працюватиме.


17

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


7
вам потрібно пробіл після коми
Мауріціо У позначці

10

Ще одна альтернатива, якщо припустити, що ваші елементи зберігаються як змінні (що часто є хорошою ідеєю, якщо ви звертаєтесь до них кілька разів у тіло функції):

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

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

Користується ланцюжком jQuery і дозволяє використовувати посилання.


4

Якщо у вас є або ви хочете зберегти свої елементи як змінні (об’єкти jQuery), ви також можете перевести цикл на них:

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

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

3

Додайте список класів, розділених комою, таким:

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

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

//  Your code

    }

});

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

У випадку, якщо ваші об’єкти на одному рівні вниз посилання дітей () замість того, щоб знайти () метод може бути використаний.


1

Окрім відмінних прикладів та відповідей, поданих вище, ви також можете зробити «пошук» для двох різних елементів, використовуючи їх класи. Наприклад:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.