Gọi chức năng onload Nhiều Windows Trong Javascript
Heres một mảnh nhỏ của Javascript thủ đoạn gian trá mà tôi đã phải đào xung quanh bởi vì tình hình commaned. Trong một trong các trang web của tôi, tôi đã có tình trạng này, nơi tôi đã phải thực hiện "windows.onload" hai lần. Điều đầu tiên mà có thể đến với một tâm trí thiếu kinh nghiệm như tôi (tôi phải thành thật nói rằng, kể từ khi tôi đã được sử dụng các khuôn khổ và thư viện javascript, tôi đã forgotton để làm những việc đơn giản ... của riêng tôi buồn nhưng thật sự), là phương pháp sau đây ...
window.onload = onloadfn1; window.onload = onloadfn2; window.onload = onloadfn3; vv ..
Xin lỗi để nói nhưng, điều này sẽ không làm việc ... không muốn thảo luận về các khoa học thực hiện Javascript nhiều ... nhưng theo kinh nghiệm gần đây của tôi, chỉ có chức năng cuối cùng (onloadfn3) sẽ bị bệnh thực sự có được thực hiện.
Trong tình huống bình thường, không giống như tôi (mà tôi sẽ nói về một chút sau này) ... bạn có thể làm một trong những điều sau đây để thực hiện các chức năng onload mutliple ....
HOẶC một cái gì đó như thế này
doOnLoad chức năng () { onloadfn1 (); onloadfn2 (); onloadfn3 (); } window.onload = doOnLoad;
Đối với tình hình hiện tại của tôi, tôi không thể sử dụng một trong các bên trên ...
Tại sao tôi cần phải gọi windows.onload hai lần, thay vì gọi hai chức năng trong một chức năng onload? Dưới đây là nhanh chóng xem xét báo cáo vấn đề của tôi ...
"Trang My Site được cấu trúc giống như các chủ đề Wordpress .... tức là có một các header.php phổ biến và Footer.php được bao gồm vào tất cả các trang. Có là một chức năng onload implementaion trong các Footer.php để làm một số chức năng onload phổ biến. , Có vài trang cần một cái gì đó onload của mình, ngoài những người thực hiện bởi các chức năng onload chung. Nếu tôi chỉ định chức năng gọi lại trực tiếp xử lý window.onload, nó sẽ qua đi xe các callbacks trước đây được giao trong Footer.php "
.... Vấn đề của tôi có hiểu
?
Vâng! có những giải pháp mà tôi đã tìm thấy. Họ tất cả đều rất giống nhau và chủ yếu implementions của một giải pháp được đưa ra bởi Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...
Giải pháp:
Đơn giản chỉ cần thêm đoạn mã javascript vào trang web ...
addLoadEvent chức năng (Func) { var oldonload = window.onload; if (typeof window.onload = 'chức năng') { window.onload = func } Else { window.onload = function () { if (oldonload) { oldonload () } func () } } }Và gọi nó là thay vì "windows.onload" thông thường
addLoadEvent (FunctionToRunOnPageLoad); addLoadEvent (function () { / * Nhiều mã chạy trên trang * tải });
Ưu điểm của đoạn mã này ...
1. Chủ yếu, Nó cho phép bạn có nhiều sự kiện windows.onload, kêu gọi từ các bộ phận riêng biệt của mã của bạn, mà không overridding định nghĩa trước
2. Nó thực sự là không phô trương. Nó có thể được đặt trong một tập tin với các kịch bản khác của bạn hoặc trong một tập tin riêng biệt.
3. Nó hoạt động ngay cả khi window.onload đã được thiết lập.










































