2011-07-28 37 views
12

Tôi có một sự kiện tùy chỉnh mà tôi đã thực hiện mà tôi muốn kích hoạt tại một số điểm mà không có sự liên quan đến lựa chọn.Sự kiện jQuery kích hoạt trên tất cả người nghe

tức là - Tôi muốn làm điều gì đó mà sẽ hành xử như chạy

$("*").trigger('customEvent'); 

Nhưng tài liệu jQuery cảnh báo rằng việc sử dụng bộ chọn phổ biến là rất chậm. Có cách nào để kích hoạt tất cả đối tượng bị ràng buộc vào một sự kiện cụ thể mà không phải sử dụng bộ chọn phổ quát $("*") không?

Cảm ơn!

P.S - Tôi hiện đang sử dụng class cụ thể được gọi là custom_event_listener và sử dụng $('.custom_event_listener').trigger('customEvent') để tránh sử dụng bộ chọn chung. Tôi tự hỏi nếu có một cách để tránh việc sử dụng một class.

+0

Bạn không thể để bong bóng sự kiện này và nắm bắt nó ở cấp cao hơn? – Andre

+0

Vì vậy, bạn muốn làm một cái gì đó cho tất cả các yếu tố, nhưng không sử dụng một lựa chọn tất cả các yếu tố. Có một cách khác để bạn có thể thu hẹp lựa chọn, nhưng chúng tôi không thể biết nó là gì mà không có thêm thông tin về những gì bạn đang làm. – Zirak

+0

@Andre Tôi không chắc điều đó có nghĩa là gì. sắp xếp một newbie trong jQuery. Tôi sẽ google 'bong bóng jQuery sự kiện' và xem nếu nó giúp. – Ben

Trả lời

15

Bạn có thể kích hoạt một sự kiện trên tất cả mọi thứ có trình xử lý ràng buộc như thế này:

$.event.trigger('customEvent'); 

This loops through $.cache to find what actually has a handler, then fires on those elements ... thay vì chỉ tìm mỗi phần tử và bắn các sự kiện trên mỗi một.

+0

Câu trả lời hay nhất cho đến nay. Nếu tôi không nhận được một câu trả lời mà thu hẹp nó xuống hơn nữa, tôi sẽ đánh dấu đây là câu trả lời. – Ben

+3

Điều này không có giấy tờ và không được dùng nữa: https://github.com/jquery/jquery/blob/935eb19d87063ec30b717b3d45368d3c73cb591d/jquery-migrate.js#L481 –

Các vấn đề liên quan