jQuery多个元素的相同单击事件


435

有什么办法可以为页面上的不同元素执行相同的代码?

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

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

而是要做类似的事情:

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

谢谢

Answers:


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选择器的格式相同
Brett Weber

8
如果class2像var class2 = $(“。class2”)这样缓存,该怎么办?
Vivek S

18
@NeverBackDown也.add()适用于jquery对象
Eevee

2
请注意,即使选择器之一返回未定义,这仍将事件附加到存在的jquery对象上。
Ben Sewards

3
有人可以解释$('.class1, .class2')和之间的真正区别是$('.class1').add('.class2')什么?在什么情况下应该使用.add()
Taufik Nur Ra​​hmanda

108

我通常使用on代替click。它允许我向特定功能添加更多事件侦听器。

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

希望能帮助到你!


1
我更喜欢这种方式。但是,您能否在同一声明中按类定位一个元素,并按ID定位一个元素?例如,$(document).on(“ click touchend”,“ .class1,#id1,.class3”,function(){//做东西});
加拉夫·奥哈

3
一年后:是的,您可以!@GauravOjha
Obed Marquez

3
这种技术(创建委托的而不是直接的处理程序)还提供了处理由注册处理程序创建的匹配元素触发的事件的独特优势。请参阅:api.jquery.com/on
Jonathan Lidbeck '17

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

确保输入$('。class1,space here.class2')这样的空格,否则它将无法正常工作。


17

只需$('.myclass1, .myclass2, .myclass3')用于多个选择器。另外,您不需要lambda函数将现有函数绑定到click事件。


7
您需要在逗号后留一个空格
Maurizio在丹麦,2013年

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

如果您的对象是下一层链接,则可以使用children()而不是find()方法。


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.