2012-03-05 44 views
15

Cách khắc phục trình xử lý sự kiện bị ghi đè? Tôi có một kịch bản nói a.jsngăn chặn window.onload bị ghi đè javascript

window.onload = function() { 
    //Handler in a.js 
} 

kịch bản khác nói b.js

window.onload = function() { 
    //Handler in b.js 
} 

nơi,

a.js là một loại thư viện của bên thứ 3 được xây dựng bởi tôi

b.js là nhà xuất bản sử dụng tập lệnh của tôi [Tôi không thể thực hiện bất kỳ thay đổi nào tại đây]

Trình xử lý tải onload trong b.js có ghi đè lên trình xử lý của a.js không?

Nếu có, Cách ngăn điều này xảy ra?

Sẽ tạo hàng đợi tất cả các trình xử lý sự kiện trong a.js và deque chúng trên trợ giúp sự kiện?

Nhưng a.js có biết tất cả các trình xử lý sự kiện cho một sự kiện trả trước cho b.js không?

Suy nghĩ và tham khảo sẽ giúp

Trả lời

8

Sử dụng element.addEventListener hoặc window.attachEvent trong các phiên bản IE xuống cấp.

mẫu addEvent phương pháp:

function addEvent(node, type, listener) { 
    if (node.addEventListener) { 
     node.addEventListener(type, listener, false); 
     return true; 
    } else if (node.attachEvent) { 
     node['e' + type + listener] = listener; 
     node[type + listener] = function() { 
      node['e' + type + listener](window.event); 
     } 
     node.attachEvent('on' + type, node[type + listener]); 
     return true; 
    } 
    return false; 
}; 

Note - Hầu hết, nếu không phải tất cả, các thư viện JavaScript hiện đại như jQueryMooTools có việc thực hiện của riêng mình. Tôi khuyên bạn nên tận dụng API của họ - vì chúng trừu tượng hóa các triển khai trình duyệt khác nhau và đã được kiểm tra kỹ lưỡng.

+0

tại sao chúng ta cần nút ['e' + type + listener]? Liệu node.attachEvent ('on' + type, listener) có hoạt động không? – Tamil

16

bạn nên sử dụng addEventListener() có bộ xử lý khác nhau cho cùng một sự kiện

window.addEventListener("load", yourfunction, false); 
-1

Vâng, báo cáo kết quả thứ hai sẽ ghi đè lên một trong những đầu tiên. Bởi vì bạn đang sử dụng mô hình đăng ký truyền thống, chỉ cho phép một xử lý sự kiện cho bất kỳ sự kiện và đối tượng cụ thể nào. Việc gán chức năng không được cộng dồn. Nhưng bạn có thể:

window.onload = function() {handlerinb(); handlerina()} 
Các vấn đề liên quan