Câu trả lời:
Bạn có thể có $(document).ready()
nhiều lần trong một trang. Mã được chạy theo trình tự mà nó xuất hiện.
Bạn có thể sử dụng $(window).load()
sự kiện cho mã của mình vì điều này xảy ra sau khi trang được tải đầy đủ và tất cả mã trong các $(document).ready()
trình xử lý khác nhau đã chạy xong.
$(window).load(function(){
//your code here
});
$(window).on('load', function() { });
vì $ (window) .load () không được dùng nữa.
Khối mã này giải quyết vấn đề của tôi,
<script type="text/javascript">
$(window).bind("load", function () {
// Code here
});
</script>
Nhiều $(document).ready()
sẽ kích hoạt theo thứ tự từ trên xuống trên trang. Cuối cùng $(document).ready()
sẽ kích hoạt cuối cùng trên trang. Bên trong cuối cùng $(document).ready()
, bạn có thể kích hoạt một sự kiện tùy chỉnh mới để kích hoạt sau tất cả các sự kiện khác ..
Gói mã của bạn trong một trình xử lý sự kiện cho sự kiện tùy chỉnh mới.
<html>
<head>
<script>
$(document).on("my-event-afterLastDocumentReady", function () {
// Fires LAST
});
$(document).ready(function() {
// Fires FIRST
});
$(document).ready(function() {
// Fires SECOND
});
$(document).ready(function() {
// Fires THIRD
});
</script>
<body>
... other code, scripts, etc....
</body>
</html>
<script>
$(document).ready(function() {
// Fires FOURTH
// This event will fire after all the other $(document).ready() functions have completed.
// Usefull when your script is at the top of the page, but you need it run last
$(document).trigger("my-event-afterLastDocumentReady");
});
</script>
Từ đây :
// Add jQuery
var GM_JQ = document.createElement('script');
GM_JQ.src = 'http://jquery.com/src/jquery-latest.js';
GM_JQ.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(GM_JQ);
// Check if jQuery's loaded
function GM_wait()
{
if(typeof unsafeWindow.jQuery == 'undefined')
{
window.setTimeout(GM_wait,100);
}
else
{
$ = unsafeWindow.jQuery;
letsJQuery();
}
}
GM_wait();
// All your GM code must be inside this function
function letsJQuery()
{
// Do your jQuery stuff in here
}
Điều này sẽ đợi cho đến khi jQuery được tải để sử dụng nó, nhưng bạn có thể sử dụng cùng một khái niệm, đặt các biến trong các tập lệnh khác của bạn (hoặc kiểm tra chúng nếu chúng không phải là tập lệnh của bạn) để đợi cho đến khi chúng được tải để sử dụng chúng.
Ví dụ: trên trang web của tôi, tôi sử dụng điều này để tải JS không đồng bộ và đợi cho đến khi chúng hoàn tất trước khi làm bất kỳ điều gì với chúng bằng jQuery:
<script type="text/javascript" language="JavaScript">
function js(url){
s = document.createElement("script");
s.type = "text/javascript";
s.src = url;
document.getElementsByTagName("head")[0].appendChild(s);
}
js("/js/jquery-ui.js");
js("/js/jrails.js");
js("/js/jquery.jgrowl-min.js");
js("/js/jquery.scrollTo-min.js");
js("/js/jquery.corner-min.js");
js("/js/jquery.cookie-min.js");
js("/js/application-min.js");
function JS_wait() {
if (typeof $.cookie == 'undefined' || // set in jquery.cookie-min.js
typeof getLastViewedAnchor == 'undefined' || // set in application-min.js
typeof getLastViewedArchive == 'undefined' || // set in application-min.js
typeof getAntiSpamValue == 'undefined') // set in application-min.js
{
window.setTimeout(JS_wait, 100);
}
else
{
JS_ready();
}
}
function JS_ready() {
// snipped
};
$(document).ready(JS_wait);
</script>
Hóa ra là do sự pha trộn đặc biệt của các khuôn khổ javascript mà tôi cần phải bắt đầu tập lệnh bằng cách sử dụng trình xử lý sự kiện do một trong các khuôn khổ khác cung cấp.
Bạn đã thử tải tất cả các hàm khởi tạo bằng cách sử dụng $().ready
hàm jQuery mà bạn muốn sau cùng chưa?
Có lẽ bạn có thể sử dụng setTimeout()
trên các $().ready
chức năng bạn muốn chạy, kêu gọi các chức năng mà bạn muốn tải.
Hoặc, sử dụng setInterval()
và kiểm tra khoảng thời gian để xem liệu tất cả các hàm tải khác đã hoàn thành chưa (lưu trữ trạng thái trong một biến boolean). Khi các điều kiện được đáp ứng, bạn có thể hủy bỏ khoảng thời gian và chạy chức năng tải.
$(window).load(function(){...})