2012-02-07 30 views
5

Tôi hiện đang làm việc cho một dự án cho trường đại học của mình. Một điều tôi cần làm là để đồng bộ hóa tất cả các đăng ký-eventhandlers javascript với máy chủ. I E. Tôi cần phải biết những yếu tố nào có một trình xử lý sự kiện cụ thể.JavaScript/jQuery: Nghe các trình xử lý sự kiện mới được đăng ký

Tôi đã sử dụng VisualEvent để tìm hiểu yếu tố nào có trình xử lý sự kiện và nó hoạt động thực sự tuyệt vời.

Nhưng điều tôi cần là có trình xử lý sự kiện được gọi là mọi lần xử lý sự kiện được đăng ký cho phần tử DOM.

Vì vậy, về cơ bản mọi thứ như $("#foo").click(...) hoặc $("#foo").bind(...) được gọi, tôi cần lấy thông tin mà trình xử lý sự kiện mới đã được đăng ký cho phần tử này.

Ngược lại, tôi cần một người nghe khi xử lý sự kiện bị xóa khỏi phần tử DOM, nhưng điều này không bắt buộc đối với nguyên mẫu đầu tiên.

Có cách nào để tôi có thể đính kèm trình xử lý trên toàn cầu vào tất cả đăng ký trình xử lý sự kiện không?

Nếu bạn cần thêm thông tin, đừng ngần ngại nhận xét.

Cảm ơn bạn đã giúp đỡ!

Trân trọng, Robert

+1

tại sao máy chủ cần phải biết không? – zzzzBov

+0

Đây là một phần của một dự án nghiên cứu để kiểm soát từ xa một trang web. Vì vậy, máy chủ cần phải biết những yếu tố nào có thể nhấp được. –

+0

Tôi chắc chắn có một cách tốt hơn để tiếp cận vấn đề, nhưng tôi không biết đủ về vấn đề này để cung cấp cho bạn lời khuyên tốt. – zzzzBov

Trả lời

8

Nếu bạn đang sử dụng jQuery 1.7+, tất cả các phương pháp để đính kèm các sự kiện đi qua jQuery.fn.on, vì vậy nó là một trường hợp đơn giản của quá cưỡi chức năng đó và đi hoang dã;

(function() { 

    var old = jQuery.fn.on; 

    jQuery.fn.on = function (events, selector, data, handler) { 
     // Ensure you still attach the events 
     var result = old.apply(this, arguments); 

     // Now do your own thing 

     // Inside here, `this` refers to the jQuery object on which `on` was invoked; 
     // it's not a specific element like it normally is within jQuery. You then 
     // therefore use something like `this.each(function() { /* this */ }); to 
     // target each element in the set. 

     // You might want to normalize the variables, as selector and data are optional, 
     // and events can be an object or string 
     jQuery.post('/spy.php', { 
      events: events, 
      selector: selector, 
      data: data 
     }, jQuery.noop); 

     return result; // keep the signature of `on`, and return the value `on()` *would* have done. 
    }; 

}()); 

Nếu bạn đang sử dụng jQuery < 1,7 và không thể nâng cấp, bạn có thể làm điều gì đó tương tự như trên, nhưng sẽ phải ghi đè bind(), live(), delegate(), vv

+2

Mặc dù bạn vẫn cần một số phương pháp để xác định các yếu tố mà sự kiện được đính kèm. Bạn không chắc chắn cách thức đó có thể hoạt động trừ khi mọi phần tử có một id duy nhất trong đánh dấu. Nếu đó là trường hợp bạn có thể sử dụng một cái gì đó như 'elements: this.map (function() {return this.id;}). Get(). Join (", ")' trong bài viết. –

+0

Điều này hoạt động hoàn hảo, cảm ơn bạn rất nhiều Matt và Dave! :) –

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