2009-08-21 3 views
323

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

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

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

вместо того, чтобы сделать что-то вроде:

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

Благодарности

ответ

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

Или:

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

Чтобы помочь разработчикам помнить об этом, даже если немного более расширенном использовании более классов псевдопользователь это тот же формат, применяя селектор CSS при определении стилей –

+3

Что делать, если class2 был кеширован как этот var class2 = $ (". Class2")? –

+9

@NeverBackDown '.add() 'работает с объектами jquery тоже – Eevee

14

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

+7

вам понадобится пробел после запятых –

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

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

69

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

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

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

+1

Мне нравится этот путь лучше. Но можете ли вы настроить таргетинг на один элемент по классу и один по идентификатору в одном объявлении? Напр. $ (document) .on ("click touchend", ".class1, # id1, .class3", function() { // делать вещи }); –

+3

через год: да, вы можете! @GauravOjha –

+1

Этот метод - создание делегированного, а не прямого обработчика - также предлагает уникальное преимущество обработки событий, вызванных сопоставлением элементов, созданных * после * регистрации обработчика. См .: http://api.jquery.com/on/ –

8

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

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

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

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

0

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

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

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

В случае ваши объекты один уровень вниз по ссылке детей() вместо find() способ можно использовать.

1

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

$("#proprice, #proqty").blur(function(){ 
     var price=$("#proprice").val(); 
     var qty=$("#proqty").val(); 
     if(price != '' || qty != '') 
     { 
      $("#totalprice").val(qty*price); 
     } 
    }); 
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».

1

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

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

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

// Your code 

    } 

}); 
Смежные вопросы