Không thể có vấn đề tiềm năng nếu người dùng gửi đầu vào cho sự kiện chuột hoặc sự kiện bàn phím trước khi toàn bộ trang được hiển thị? [đoạn này] là đề cập đến một kịch bản không sử dụng .ready()
Nói chung, nếu bạn muốn tham khảo một yếu tố từ Javascript yếu tố trong câu hỏi phải đã được phân tích cú pháp, tức là, thêm vào Cây DOM. Điều này áp dụng cho dù bạn đang cố gắng đính kèm một trình xử lý sự kiện (có hoặc không có jQuery), thay đổi các thiết lập CSS của nó, hoặc bất cứ điều gì.
Việc xử lý .ready()
không đợi cho toàn bộ trang được render, nó chờ đợi cho trang để là "sẵn sàng" cho các thao tác JS theo nghĩa là nó đã được phân tích cú pháp và cây toàn bộ DOM có được xây dựng. Tại thời điểm đó, việc hiển thị vẫn có thể xảy ra, ví dụ: nội dung thực tế của các phần tử hình ảnh vẫn có thể được tải xuống một phần.
Tuy nhiên, người ta có thể tiến hành thao tác các yếu tố từ JavaScript trước (hoặc không có) các .ready()
miễn là bạn làm như vậy trong một khối kịch bản được bao gồm sau các yếu tố (s) trong câu hỏi trong trang nguồn, bởi vì trình duyệt thực hiện phân tích cú pháp từ đầu đến cuối từ nguồn html của bạn. Một ví dụ:
<input type="text" id="input1">
<script>
// following will work, because "input1" already exists
$("#input1").change(function() { /* do something */ });
// following will NOT work, because "input2" has not been parsed yet
$("#input2").change(function() { /* do something */ });
</script>
<input type="text" id="input2">
Vì vậy, nếu vì một lý do bạn có một số thành phần quan trọng của chức năng mà bạn cảm thấy bạn hoàn toàn phải thiết lập trước.ready()
bạn có thể làm một cái gì đó giống như ở trên.
Lưu ý rằng bạn không cần chức năng .ready()
nếu bạn bao gồm tập lệnh ở cuối phần thân, vì (như với .ready()
) tại thời điểm đó tất cả các phần tử sẽ được phân tích cú pháp.
Nơi bạn làm cần .ready()
là dành cho mã trong tệp JS bên ngoài nếu bạn không chắc chắn vị trí tệp sẽ được bao gồm trong trang. Nếu nó được bao gồm trong phần <head>
, nó sẽ được thực thi trước khi phần còn lại của tài liệu được phân tích cú pháp, do đó bạn cần sử dụng .ready()
.
Đoạn thứ hai của bạn sẽ chuyển ngược lại. Đó là chính xác những gì document.ready ngăn cản xảy ra. – Sparky
Đoạn thứ hai của tôi là đề cập đến một tập lệnh ** NOT ** bằng cách sử dụng '.ready()' – user784637
Sau đó, bạn nên mở rộng và cải thiện định dạng câu hỏi của mình để giải thích thêm. Một trang được xây dựng đúng cách sẽ không thể thực thi bất kỳ sự kiện hoặc đầu vào chuột nào trước khi DOM được tải đầy đủ. Khi sử dụng jQuery, document.ready rất quan trọng để tạo điều kiện thuận lợi cho việc này. – Sparky