2011-08-21 34 views
13

Có trình xử lý sự kiện nào trước khi onLoad/onPageShow không? Sự cố với onLoad là nếu có bất kỳ thay đổi nào trong hiển thị, trang sẽ hiển thị mà không thay đổi cho đến khi nó được tải đầy đủ, sau đó tập lệnh sẽ chạy. Cách tốt nhất để đảm bảo rằng nó sẽ chạy càng sớm càng tốt?Javascript trước khi tải?

+2

Phần tử tập lệnh nội tuyến đồng bộ sẽ chạy trước các sự kiện đó. –

Trả lời

21

Nếu bạn đặt câu lệnh Javascript (thay vì định nghĩa chức năng) bên trong thẻ <script>, chúng sẽ được thực thi trong khi tải trang - trước khi sự kiện onLoad được kích hoạt.

<html> 
<body> 
    <h2>First header</h2> 
    <script type="text/javascript"> 
    alert("Hi, I am here"); 
    document.write("<h3>This is Javascript generated</h3>"); 
    </script> 
    <h2>Second header</h2> 
</body> 
</html> 

Lưu ý rằng bạn không thể tìm kiếm phần tử theo ID vì phần tử này có thể chưa được hiển thị, vì vậy khả năng thay đổi trang của bạn bị giới hạn.

Dòng dưới cùng: có thể, không được khuyến nghị.

Những gì tôi thường làm gì trong tình huống như vậy là như sau:

  • Tận dụng các bộ phận của trang đó có thể thay đổi vô hình (thông qua style="visibility:hidden;");
  • Bật onLoad chạy mã Javascript thay đổi trang và sau đó đặt khả năng hiển thị của các phần được nêu thành visibility:visible.
+0

Tôi nghĩ * hầu hết * trình duyệt sẽ xử lý chính xác 'getElemementById' miễn là phần tử đã được xác định trước đó tài liệu - tuy nhiên, DOM không được đảm bảo cho đến khi tải lên như được chỉ ra, do đó, nó là độ dốc ... :) –

+2

Bạn cũng có thể sử dụng sự kiện DOMContentloaded kích hoạt khi DOM đã tải hoàn toàn nhưng không phải tất cả các phương tiện. OnLoad chỉ kích hoạt sau khi tất cả phương tiện đã được tải. – citadelgrad

-1

Câu trả lời đơn giản là thực hiện cuộc gọi hàm sau phần tử DOM bên trong phần nội dung của trang. Tôi đã có vấn đề này bằng cách sử dụng một chức năng javascript để phong cách liên kết menu điều hướng của tôi, tuy nhiên tôi đã có một yếu tố bản đồ google khiến trang tải chậm. Trên trang paticular này, tôi chạy tập lệnh ngay sau liên kết. Nó là một giải pháp, có thể không phải là tốt nhất nhưng nó hoạt động. Hi vọng điêu nay co ich.

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