2012-06-07 46 views
6

Tôi đã sử dụng $(window).load(function(){}); cho các dự án của mình cho đến khi tôi thấy ai đó nói rằng chúng tôi có thể sử dụng $(function(){}); và chúng sẽ hoạt động giống hệt nhau.
Nhưng bây giờ tôi có nhiều kinh nghiệm hơn, tôi đã nhận thấy rằng chúng không giống nhau. Tôi nhận thấy rằng đoạn đầu tiên sẽ xuất hiện một chút sau đoạn mã thứ hai.
Tôi chỉ muốn biết sự khác biệt là gì?

+6

Người đầu tiên liên kết với các chức năng để các 'sự kiện load', và điều thứ hai gắn kết nó vào' sự kiện DOMContentLoaded' (mà xảy ra sớm hơn) –

+0

@ ŠimeVidas , Ngay trên mục tiêu +1 – Jashwant

+0

bản sao có thể có của [jQuery - Sự khác biệt giữa $ (tài liệu) .ready và $ (window) .load?] (Http://stackoverflow.com/questions/8396407/jquery-what-are -differences-between-document-ready-and-window-load) – Mottie

Trả lời

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

sẽ đợi cho đến khi tài liệu được nạp (cây DOM được nạp) chứ không phải đến khi toàn bộ cửa sổ được tải. ví dụ Nó sẽ không chờ đợi cho các hình ảnh, css hoặc javascript được nạp đầy đủ. Một khi DOM được nạp với tất cả các thành phần HTML và xử lý sự kiện các tài liệu đã sẵn sàng để được xử lý và sau đó là $ (document) .ready() sẽ hoàn thành

$(window).load(function(){});

này đợi cho toàn bộ cửa sổ được nạp vào. Khi toàn bộ trang được tải thì chỉ có $ (window) .load() được hoàn tất. Do đó rõ ràng $ (document) .ready (function() {}) kết thúc trước $ (window) .load() vì việc điền các thành phần (như hình ảnh, css) mất nhiều thời gian hơn sau đó chỉ cần nạp cây DOM.

Vì vậy $(function(){}); không thể được sử dụng như một sự thay thế cho $(window).load(function(){});

2

$(window).load từ kinh nghiệm của tôi chờ đợi cho đến khi tất cả mọi thứ bao gồm cả hình ảnh được nạp trước khi chạy nơi như $(function() {}); có hành vi tương tự như $(document).ready(function() {});

Xin vui lòng ai đúng cho tôi nếu tôi sai.

+3

Khi tràn ngăn xếp, chúng tôi sẽ sửa lỗi nếu bạn sai; bạn không cần phải yêu cầu nó :) Trong trường hợp này, bạn không sai chút nào. –

+1

Tôi đồng ý với David. Chúng tôi sửa ngay cả định dạng :) – Jashwant

0

Thứ hai là/là lối tắt cho $(document).ready(), sẽ chạy trước sự kiện tải của window.

Lưu ý rằng $(document).ready() là cách ưa thích để gắn kết thứ gì đó với số document tải; có một vài cách khác để thực hiện nó giống như cách bạn thể hiện, nhưng điều đó được ưa thích hơn.

4

Từ chính bản thân số jQuery docs.

Việc đầu tiên mà các lập trình viên Javascript nhất kết thúc làm là thêm một số mã để chương trình của họ, tương tự như sau:

window.onload = function(){ alert("welcome"); } 

Bên trong đó là mã mà bạn muốn chạy ngay khi trang được tải . Tuy nhiên, có vấn đề, mã Javascript không chạy cho đến khi tất cả các hình ảnh được tải xuống xong (bao gồm cả quảng cáo biểu ngữ). Lý do cho việc sử dụng window.onload ở nơi đầu tiên là HTML 'document' chưa được tải xong, khi bạn lần đầu tiên thử chạy mã của bạn.

Để giải quyết, jQuery có một tuyên bố đơn giản để kiểm tra tài liệu và chờ đợi cho đến khi nó sẵn sàng để được thao tác, được gọi là sự kiện đã sẵn sàng:

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

Bây giờ,

$(window).load(function(){}); bằng window.onload = function(){ alert("welcome"); }

Và, $(function(){}); là một phím tắt để $(document).ready(function(){ });

Tôi nghĩ rằng, điều này sẽ xóa tất cả mọi thứ :)

+4

Là một chú thích, cá nhân tôi luôn thích đánh vần '$ (tài liệu) .ready (function() {...});' để rõ ràng. Một nhà phát triển ít kinh nghiệm đến sau tôi có thể không biết '$ (function() {..}' có nghĩa là, hoặc bất kỳ ai (kể cả bản thân tôi) có thể lướt qua nó và xem 'function() {...}' thay vào đó Khi viết mã, luôn luôn rõ ràng hơn là để tiết kiệm một số ít các tổ hợp phím và sự nhầm lẫn foment xuống dòng. – Blazemonger

+0

Tôi đồng ý @Blazemonger :) – Jashwant

+0

@Jashwant - Bạn có biết chính xác những gì gây nên $ (cửa sổ) .load() Đốt? Tôi tin rằng đó là khi 'document.readyState' thay đổi thành' complete' nhưng tôi không thể tìm thấy nó trong tài liệu jQuery ở bất cứ đâu. Đây là tài liệu tham khảo của Mozilla: https://developer.mozilla.org/en-US/docs/Web/API/document.readyState – jamis0n

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