2011-11-06 27 views
9

Tôi có 3 đối tượng jquery:Bind một chức năng trên nhiều yếu tố jQuery cùng một lúc

var a = $('.el1'); 
var b = $('.el2'); 
var c = $('.el3'); 

Và tôi muốn để ràng buộc một "thay đổi" sự kiện để tất cả chúng cùng một lúc, nhưng tôi không thể :(

$(a, b, c).bind('paste input change', function(){ ... }); chỉ đơn giản không hoạt động ...

Nhưng nếu ràng buộc nó vào từng yếu tố riêng biệt hoạt động:

a.bind('...'); 
b.bind('...'); 
c.bind('...'); 

Có thể thực hiện điều này một cách ngắn hơn không?

(Và không chuyển các lớp làm bộ chọn)

+0

Có bạn đã thử '$ ('. el1, .el2, .el3'). bind'? –

+0

có và tôi biết nó hoạt động, nhưng tôi không muốn làm điều đó bởi vì các đối tượng được sử dụng ở những nơi khác và tôi không thích làm việc với các lớp máng toàn bộ kịch bản. Tôi chỉ muốn sử dụng chúng ngay từ đầu :) (ví dụ: trong trường hợp tôi thay đổi các lớp học, tôi không phải tìm kiếm tất cả tập lệnh) – Alex

Trả lời

22

Sử dụng .add()[docs]:

a.add(b).add(c).bind(... 
+0

tx, đó là những gì tôi cần: D – Alex

+0

Bạn nên đánh dấu đây là câu trả lời của bạn. – erturne

2

Sử dụng $('.el1, .el2, .el3').bind(.....

Một giải pháp khác là kết hợp chúng sau:

var d = a; 
d.add(b); 
d.add(c); 

d.bind(.... 

Và nếu bạn không thích điều đó, hoặc, nếu bạn muốn gọi với phím tắt riêng biệt sau khi tất cả, bạn có thể chọn để khai báo một hàm có tên một lần, và đề cập đến điều đó, thay vì tuyên bố cùng một hàm nội tuyến ẩn danh ba lần.

+0

có thực hiện chức năng được khai báo 3 lần không? – Alex

+0

Vâng, có lẽ một số tối ưu hóa để ngăn chặn điều đó, nhưng ít nhất nó sẽ được phân tích cú pháp ba lần và được kiểm tra dựa vào hàm băm của các hàm hiện có để xem nó có giống nhau hay không. – GolezTrol

+1

Lỗi phổ biến với phương thức '.add()' là nó KHÔNG thêm phần tử vào đối tượng jQuery hiện tại. Nó trả về một đối tượng jQuery mới với nó được thêm vào. Vì vậy, bạn cần 'd = d.add (b)' để thêm 'b' vào' d'. – jfriend00

3

Hãy thử điều này:

$('.el1, .el2, .el3').bind(....) 
6

$ ([a, b, c]) ràng buộc nên làm việc, như trong:.

var a = $('.el1'); 
var b = $('.el2'); 
var c = $('.el3'); 

$([a,b,c]).each(function(idx){ 
    $(this).bind('click', function(){ 
     alert($(this).text()); 
    }); 
}); 
Các vấn đề liên quan