2013-04-02 40 views
15

Another question on stackoverflow chỉ ra rằng người ta có thể kích hoạt một sự kiện trên tất cả các đối tượng sử dụng listning:Không thể lắng nghe sự kiện toàn cầu trong jQuery

$.event.trigger('customEvent'); 

Tuy nhiên điều này dường như không làm việc cho tôi trong một ví dụ như :

$('body').bind('customEvent', function(){ alert('Working!'); }); 

Tôi đang làm điều gì đó hoàn toàn sai, hoặc có chức năng tuyệt vời này đã bị vô hiệu hóa chưa?

+0

bất kỳ lỗi hiển thị trong phát triển điều khiển? – Raptor

+0

Làm việc cho tôi (phiên bản 1.7.1) –

+4

Dường như nó hoạt động cho đến khi jQuery 1.8.3: http://jsfiddle.net/fkling/3Grvn/. Không hoạt động nữa trong jQuery 1.9+. –

Trả lời

5

Dường như chức năng đó đã bị xóa. Duyệt qua các thẻ mà tôi đã quản lý để tìm this TODO in v1.8b1:

// TODO: Dừng chế độ bộ nhớ cache dữ liệu; xóa các sự kiện toàn cầu và luôn đính kèm vào tài liệu

Và nó đã bị xóa là v1.9.0.

Không có gì ngăn bạn triển khai dựa trên mã nguồn cũ here (v1.6.2), nhưng có vẻ như nó đang làm những điều nghịch ngợm nói chuyện với jQuery.cache vì vậy tốt nhất là nên sống mà không có nó hoặc đưa ra giải pháp khác.

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

Có lẽ? (jsFiddle)

Hoặc cách tiếp cận hiệu quả hơn trong việc theo dõi từng đăng ký và gọi số .trigger() trên đó.

jsFiddle

var customSubs; 

$.fn.subscribeCustom = function (fn) { 
    this.on('customEvent', fn); 
    if (!customSubs) 
     customSubs = this; 
    else 
     customSubs = customSubs.add(this); 
}; 

$('span').subscribeCustom(function() { 
    alert('span!'); 
}); 
$('div').subscribeCustom(function() { 
    alert('div!'); 
}); 

customSubs.trigger('customEvent'); 
+0

Bộ chọn đó đang giết tôi –

+0

Tôi không thích bộ chọn chung, đó là lý do tại sao tôi muốn sử dụng công cụ này. Nhưng kể từ khi nó đã được gỡ bỏ, tôi sẽ chỉ trở lại để đính kèm vào tài liệu sau đó. Cảm ơn vì thông tin! –

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