2010-05-12 46 views
22

Cách kiểm tra xem tài liệu đã sẵn sàng chưa (tất cả các tệp js đã tải, DOM đã sẵn sàng) thông qua jQuery chưa? Có lá cờ nào không?Cách kiểm tra xem tài liệu đã sẵn sàng chưa?

Đối mặt với sự cố nếu một số tệp không được tải xuống hoàn toàn và sự kiện được người dùng nâng lên. Tôi muốn kiểm tra bên trong xử lý sự kiện.

Tôi đang sử dụng jQuery, asp.net

+3

Đây là một trong những bài học đầu tiên trong hướng dẫn jQuery trung bình. Ví dụ bạn đã đọc một? Bạn có thể tìm thấy một số [ở đây] (http://docs.jquery.com/Hướng dẫn). [Hướng dẫn chính] (http://docs.jquery.com/Tutorials:How_jQuery_Works) xử lý điều này đã có trong chương 2. – BalusC

+0

Có, tôi biết chức năng Ready, nhưng làm thế nào để kiểm tra xem DOM đã sẵn sàng chưa? – Lalit

+1

@Litit: DOM là '$ (tài liệu)' trong jQuery. – BalusC

Trả lời

26

này không được ghi nhận, tôi không nghĩ, nhưng nếu bạn nhìn vào mã jQuery cho $(document).ready:

// If the DOM is already ready 
if (jQuery.isReady) { 
    // Execute the function immediately 
    fn.call(document, jQuery); 
} // ... 

Như vậy, đối với một cách mà có thể thay đổi, bạn có thể sử dụng $.isReady hoặc jQuery.isReady.

Cách tốt hơn là sử dụng $(document).ready trong dòng. ví dụ.:

function myClickHandler(event) { 
    // do stuff 

    $(document).ready(function() { 
    // Do this immediately if DOM is loaded, or once it's loaded otherwise. 
    } 
} 

Về cơ bản, điều này sử dụng chức năng sẵn sàng làm người bảo vệ. Thay vì câu lệnh if, bạn sử dụng hàm sẵn sàng. Tất nhiên, chức năng sẵn sàng có hành vi mà nó sẽ chạy khi DOM được tải. Nếu hành vi của bạn chỉ muốn một cái gì đó xảy ra nếu nó được tải, nhưng không bao giờ làm điều đó nếu DOM không được tải, sau đó sử dụng cờ ở trên, hoặc thiết lập của riêng bạn, là cách tốt hơn để đi. Thiết riêng bạn:

$(document).ready(function() { 
    window.domIsReady = true; 
} 

if (window.domIsReady) { 
    // do stuff 
} 

Tạo riêng của bạn có lẽ là tốt hơn, vì jQuery.isReady dường như không được ghi lại, và do đó có thể không được hỗ trợ và có thể thay đổi bất cứ lúc nào.

+0

Trong ví dụ cuối cùng của bạn, tại sao không chỉ // làm các công cụ trong $ (document) .ready block? – Mathew

+1

Ông đặc biệt nói rằng ông muốn một lá cờ để kiểm tra trong một xử lý sự kiện khác. Sai lầm đã đặt độc lập if (window.domIsReady) - trường hợp sử dụng được trình bày sẽ có trong một hàm khác. Xin lỗi vì không rõ ràng. –

5

Đây có phải là câu hỏi mẹo không? :)

gì bạn đang tìm kiếm là document.ready

Ví dụ:

$(document).ready(function() { 

    alert ("document is ready!"); 

    }); 
+0

Tôi thực sự nghĩ vậy :) –

+1

Các bạn, tôi biết về chức năng Sẵn sàng. Tôi có một trình xử lý sự kiện nhấp chuột khác, tôi chỉ muốn kiểm tra xem tất cả các tệp js khác được tải và DOM đang ở trạng thái sẵn sàng. – Lalit

+1

@Tôi thấy. Tôi không biết một lá cờ 'sẵn sàng' nào để kiểm tra, mặc dù tôi sẽ không ngạc nhiên nếu có một lá cờ. Nếu không có gì xảy ra, tôi sẽ xây dựng một hàm '$ (document) .ready()' đặt cờ thành true: 'document_loaded' hoặc một cái gì đó. Sau đó, bạn có thể kiểm tra cờ đó. –

1

Jquery có này:

$(document).ready(function(){ 
    alert('document ready here') 
}); 

Nó đã trở thành thói quen khá phổ biến để quấn bất kỳ jquery mà thao túng DOM trong một khối $ (document) .ready(), để đảm bảo DOM là tất cả ở đó trước khi tiếp tục.

+0

.ready() không phải là những gì OP đang tìm kiếm. –

+1

Được rồi, hãy tiếp tục! Ai downvoted chỉ là câu trả lời của tôi cho điều này ?! Vì xấu hổ! :) – Mathew

7
$(document).ready(function() { 
    // Handler for .ready() called. 
}); 
3

Một chức năng cuộc gọi đơn giản để xem nếu cơ sở thậm chí còn tải.

jQuery(document).ready(function(){ 
     alert("howdy"); 
    }); 

thay thế, tìm hiểu xem nó được nạp (tốt hơn)

<script type="text/javascript"> 
if (typeof jQuery == 'undefined') 
{ 
    alert('not loaded'); 
} 
</script> 

CHO NGẮN NUTS OUT THERE: (không typeof cần thiết :)

<script type="text/javascript"> 
    if(!this.$) 
    { 
     alert('not loaded'); 
    } 
    </script> 
0

tưởng các document.ready mã chỉ được kích hoạt khi tài liệu và tất cả các tệp được tải. Không bao giờ có vấn đề với bản thân mình.

Nếu tôi gặp sự cố, tôi sẽ đặt một var vào tất cả các tệp cần thiết và kiểm tra xem chúng có thêm hay không, đặt tất cả mã trong một tệp.

tha thứ cho tôi vì đã không đăng một câu trả lời dứt khoát

+0

Không, document.ready được kích hoạt ngay khi DOM HTML đã được tải. onload được kích hoạt khi mọi thứ khác (ví dụ: hình ảnh) đã kết thúc. –

0

Bạn đang tìm kiếm các nguồn gốc window.onload sự kiện bởi bất kỳ cơ hội? Nó được kích hoạt khi mọi thứ trên trang (bao gồm tập lệnh, hình ảnh, bảng định kiểu) đã được tải.

function doStuff() { 
    alert("The DOM and everything inside have loaded"); 
} 
window.onload = doStuff; 

Xem thêm: addLoadEvent.

+0

đã sẵn sàng! = Được tải, xem [ở đây] (http: // stackoverflow.com/questions/8396407/jquery-what-are-different-between-document-ready-and-window-load) –

1

Tôi nghĩ rằng những gì sau của bạn là:

$(window).load(function(){ 
    alert("All content has been downloaded to the web browser") 
    }); 

đó có tôi đã làm một blog về cách đây không lâu:

0

Từ jquery 1.8.x .ready() api page, có vẻ như ràng buộc một chức năng xử lý sự kiện sử dụng cú pháp sau giải quyết vấn đề:

$(document).ready(handler); 

Chức năng 'xử lý' sẽ được gọi là , ngay cả khi sự kiện 'sẵn sàng' đã được kích hoạt.

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