Làm thế nào để thực hiện mã jquery SAU KHI tải trang?


85

Nếu bạn muốn một sự kiện hoạt động trên trang của mình, bạn nên gọi sự kiện đó bên trong hàm $ (document) .ready (). Mọi thứ bên trong nó sẽ tải ngay sau khi DOM được tải và trước khi nội dung trang được tải.

Tôi muốn thực hiện mã javascript chỉ sau khi nội dung trang được tải, làm thế nào tôi có thể làm điều đó?

Câu trả lời:


168

Sử dụng loadthay vì ready:

$(document).load(function () {
 // code here
});

Cập nhật Bạn cần sử dụng .on()kể từ jQuery 1.8. ( http://api.jquery.com/on/ )

$(window).on('load', function() {
 // code here
});

Từ câu trả lời này :

Theo http://blog.jquery.com/2016/06/09/jquery-3-0-final-released/ :

Đã xóa các bí danh sự kiện không dùng nữa

.load, .unload.error, không được dùng nữa kể từ jQuery 1.8, không còn nữa. Sử dụng .on()để đăng ký thính giả.

https://github.com/jquery/jquery/issues/2286


1
Từ nhận xét về câu trả lời này: stackoverflow.com/a/37817516/957246 $ (window) .on ("load", function () {// code here}); ..vì ".load" không được dùng nữa.
trapper_hag

bằng cách sử dụng .on () nó quá rõ ràng .. nhưng tôi đã dành 1h đập đầu vào tường trước khi tìm thấy điều này .. cảm ơn bạn ..!
ghuroo

2
Hãy coi chừng sai lầm khi thử $(document).on('load', ...cần phải có$(window).on('load',...
Người dùng

29

Tiếp theo

$(document).ready(function() { 
});

Có thể được thay thế

$(window).bind("load", function() { 
     // insert your code here 
});

Có một cách nữa mà tôi đang sử dụng để tăng thời gian tải trang.

$(document).ready(function() { 
  $(window).load(function() { 
     //insert all your ajax callback code here. 
     //Which will run only after page is fully loaded in background.
  });
});

2
một trình xử lý tải trong trình xử lý sẵn sàng? Đó là sự điên rồ, bạn không cần tài liệu sẵn sàng vì cửa sổ đã tồn tại vào thời điểm đó và bạn có thể đính kèm một trình xử lý mà không cần nó.
dalore

18

không ai đề cập đến điều này

$(function() {
    // place your code
});

đó là một hàm viết tắt của

$(document).ready(function() { .. });

16

Chỉnh sửa: Mã này sẽ đợi cho đến khi tất cả nội dung (hình ảnh và tập lệnh) được tải đầy đủ và hiển thị trong trình duyệt.

Tôi đã gặp sự cố này, nơi $(window).on('load',function(){ ... })mã của tôi sẽ kích hoạt quá nhanh vì Javascript tôi đã sử dụng cho mục đích định dạng và ẩn các phần tử. Các phần tử bị ẩn quá sớm và nơi còn lại có chiều cao bằng 0.

Bây giờ tôi sử dụng $(window).on('pageshow',function(){ //code here });và nó hoạt động vào thời điểm tôi cần.


1
Điều này cũng giúp tôi, chính xác là tôi muốn chạy một số mã sau khi trang jQuery Mobile được hiển thị. Cảm ơn bạn. @Boyd Cyr
codedudey

Chỉ muốn thêm mã này hữu ích hơn bao nhiêu so với câu trả lời được chấp nhận. Cảm ơn rất nhiều.
Countzero

10

Bạn có thể tránh bị undefined trong '$' theo cách này

window.addEventListener("DOMContentLoaded", function(){
    // Your code
});

CHỈNH SỬA: Sử dụng 'DOMContentLoaded' nhanh hơn chỉ 'tải' vì trang chờ tải đã được tải đầy đủ, bao gồm các ảnh ... trong khi DomContentLoaded chỉ đợi cấu trúc


8

Tôi đang tìm kiếm vấn đề tương tự và đây là những gì giúp tôi. Đây là phiên bản jQuery 3.1.0 và sự kiện tải không được dùng nữa kể từ phiên bản jQuery 1.8 . Sự kiện tải được xóa khỏi jQuery 3.0. Thay vào đó, bạn có thể sử dụng phương thức on và liên kết sự kiện tải JavaScript:

$(window).on('load', function () {
  alert("Window Loaded");
});


5

viết mã mà bạn muốn được thực thi bên trong này. Khi tài liệu của bạn đã sẵn sàng, điều này sẽ được thực thi.

$(document).ready(function() { 

});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.