jQuery cùng một sự kiện nhấp chuột cho nhiều yếu tố


435

Có cách nào để thực thi cùng một mã cho các thành phần khác nhau trên trang không?

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

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

thay vào đó để làm một cái gì đó như:

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

Cảm ơn

Câu trả lời:


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

Hoặc là:

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

Điều này cũng hoạt động với các đối tượng hiện có:

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

11
Để giúp các nhà phát triển ghi nhớ điều này, ngay cả khi mở rộng thêm một chút bằng cách sử dụng nhiều lớp psuedo hơn, nó có cùng định dạng với việc áp dụng bộ chọn css khi xác định kiểu
Brett Weber

8
Điều gì xảy ra nếu có class2 được lưu trong bộ nhớ cache như var class2 = $ (". Class2") này?
Vivek S

18
@NeverBackDown cũng .add()hoạt động với các đối tượng jquery
Eevee

2
Lưu ý rằng điều này vẫn sẽ đính kèm các sự kiện vào các đối tượng jquery tồn tại, ngay cả khi một trong các bộ chọn trả về không xác định.
Bến cống

3
ai đó có thể giải thích sự khác biệt thực sự giữa $('.class1, .class2')$('.class1').add('.class2')? Trong trường hợp nào chúng ta nên sử dụng .add()?
Taufik Nur Rahmanda

108

Tôi thường sử dụng onthay vì click. Nó cho phép tôi thêm nhiều sự kiện người nghe vào một chức năng cụ thể.

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

Hy vọng nó giúp!


1
Tôi thích cách này tốt hơn. Nhưng bạn có thể nhắm mục tiêu một yếu tố theo lớp và một theo ID trong cùng một khai báo không? Ví dụ: $ (tài liệu) .on ("nhấp vào touchend", ". Class1, # id1 ,. Class3", function () {// do Stuff});
Gaurav Ojha

3
một năm sau: có, bạn có thể! @GauravOjha
Marquez Parlapiano

3
Kỹ thuật này - tạo một trình xử lý được ủy nhiệm, thay vì xử lý trực tiếp - cũng mang lại lợi thế duy nhất cho việc xử lý các sự kiện được kích hoạt bởi các yếu tố phù hợp được tạo sau khi đăng ký trình xử lý. Xem: api.jquery.com/on
Jonathan

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

Hãy chắc chắn rằng bạn đặt một khoảng trắng như $ ('. Class1, khoảng trắng ở đây. Class2') nếu không nó sẽ không hoạt động.


17

Đơn giản chỉ cần sử dụng $('.myclass1, .myclass2, .myclass3')cho nhiều bộ chọn. Ngoài ra, bạn không cần các hàm lambda để liên kết một hàm hiện có với sự kiện nhấp chuột.


7
bạn cần một khoảng trắng sau dấu phẩy
Maurizio In denmark

10

Một cách khác, giả sử các phần tử của bạn được lưu trữ dưới dạng các biến (thường là một ý tưởng tốt nếu bạn truy cập chúng nhiều lần trong một thân hàm):

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

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

Tận dụng lợi thế của chuỗi jQuery và cho phép bạn sử dụng các tài liệu tham khảo.


4

Nếu bạn có hoặc muốn giữ các phần tử của mình dưới dạng các biến (đối tượng jQuery), bạn cũng có thể lặp qua chúng:

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

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

3

Thêm một danh sách các lớp được phân tách bằng dấu phẩy như thế này:

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

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

//  Your code

    }

});

2

Chúng tôi có thể mã như sau, tôi đã sử dụng sự kiện mờ ở đây.

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

1

Tôi có một liên kết đến một đối tượng chứa nhiều trường đầu vào, đòi hỏi phải được xử lý bởi cùng một sự kiện. Vì vậy, tôi chỉ cần sử dụng find () để lấy tất cả các đối tượng bên trong, cần phải có sự kiện

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

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

Trong trường hợp các đối tượng của bạn giảm một cấp, có thể sử dụng phương thức children () thay vì find () .


1

Ngoài các ví dụ và câu trả lời xuất sắc ở trên, bạn cũng có thể thực hiện "tìm" cho hai yếu tố khác nhau bằng cách sử dụng các lớp của chúng. Ví dụ:

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

Điều này sẽ xuất ra "HelloWorld".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.