var test = { }
$(test).on("testEvent", function(){
console.log("testEvent has fired");
});
$.event.trigger("testEvent");
Tôi đang cố gắng sử dụng jQuery để thực hiện cơ chế xuất bản/đăng ký sử dụng sự kiện. Tôi cần để có thể đính kèm các sự kiện vào các đối tượng không phải DOM và có thể kích hoạt tất cả các sự kiện từ một trình kích hoạt toàn cục. Tôi dự kiến mã ở trên hoạt động nhưng không dẫn đến việc testEvent kích hoạt đối tượng thử nghiệm.
Lưu ý rằng sẽ có nhiều đối tượng trong đó một sự kiện sẽ được đăng ký. Một $ .event.trigger duy nhất sẽ kích hoạt tất cả các sự kiện đó.
Do lưu ý rằng mã này hoạt động tốt:
$('#someID').on("testEvent", function() {
console.log('testEvent has fired from DOM element');
})
$.event.trigger("testEvent");
Lý do sự kiện không kích hoạt do đối tượng không thuộc DOM. Khi tôi kích hoạt $ .event.trigger, nó sẽ kích hoạt sự kiện và tạo bọt thông qua DOM. Thấy như đối tượng không phải là một phần của DOM nó không cháy. Điều tôi thực sự tìm kiếm ở đây là bằng cách nào đó kích hoạt các sự kiện trong các đối tượng không phải DOM trên toàn cầu bằng cách sử dụng jQuery. Tôi đang cố gắng tránh phải sử dụng một cái gì đó như AmplifyJS để thực hiện điều này. – crv
Cách duy nhất để kích hoạt sự kiện bạn đăng là với '$ (test) .trigger (" testEvent ");'. –
Nếu bạn không chuyển một phần tử vào '$ .event.trigger' và sự kiện được kích hoạt không phải là sự kiện toàn cầu, sự kiện đó sẽ không kích hoạt sự kiện. Xem khối mã bắt đầu trên dòng 3104 của http://code.jquery.com/jquery-1.7.2.js. Vì đây là một phương pháp không có giấy tờ, chúng tôi phải đi đến mã để xem nó làm gì. –