$ (เอกสาร) จำเป็นหรือไม่?


111

ฉันเห็นคำถามนี้ใน stackoverflow แต่ไม่รู้สึกว่ามีคำตอบเลย

คือ$(document).readyจำเป็น?

ฉันเชื่อมโยงจาวาสคริปต์ทั้งหมดของฉันที่ด้านล่างของหน้าดังนั้นในทางทฤษฎีพวกเขาทั้งหมดทำงานหลังจากที่เอกสารพร้อมแล้ว


3
เบราว์เซอร์รุ่นเก่าอาจไม่สนุกกับการดาวน์โหลดแบบขนานที่เบราว์เซอร์รุ่นใหม่ใช้ นั่นคือเหตุผลหลักที่สคริปต์ของคุณวางไว้ที่ด้านล่าง โดยเฉพาะอนุญาตให้แสดง HTML และ CSS ของคุณก่อนบนเบราว์เซอร์รุ่นเก่า ณ จุดนี้คุณมีทางเลือกในการกำหนดวิธีการตรวจจับว่า DOM โหลดแล้ว สองวิธียอดนิยมในการเริ่มต้น js ของคุณคือ window.onload & $ (document) พร้อม (ร่วมกับ jQuery) มีตัวเลือกอื่น ๆ และค้นหาได้ง่ายข้อเสียที่ชัดเจนของ window.onload ประเด็นคือ $ (เอกสาร) ใช้งานได้บ่อยกว่าไม่ & ใช้งานง่าย
BradChesney79

คำตอบ:


126

คือ$(document).readyจำเป็น?

ไม่

หากคุณวางสคริปต์ทั้งหมดไว้ก่อน</body>แท็กปิดแสดงว่าคุณได้ทำสิ่งเดียวกัน

นอกจากนี้หากสคริปต์ไม่จำเป็นต้องเข้าถึง DOM ก็จะไม่สำคัญว่าจะโหลดจากที่ใดเกินกว่าการพึ่งพาสคริปต์อื่น ๆ

สำหรับ CMS จำนวนมากคุณไม่มีทางเลือกมากนักว่าจะโหลดสคริปต์ที่ไหนดังนั้นจึงเป็นรูปแบบที่ดีสำหรับโค้ดโมดูลาร์ในการใช้document.readyเหตุการณ์ คุณต้องการกลับไปแก้ไขข้อบกพร่องของรหัสเก่าจริงๆหรือไม่ถ้าคุณนำกลับมาใช้ที่อื่น

นอกหัวข้อ:

ขณะที่ทราบด้าน: คุณควรใช้jQuery(function($){...});แทนเป็นมันบังคับนามแฝงไป$(document).ready(function(){...});$


คุณแน่ใจหรือไม่ว่า "สิ่งเดียวกัน" ฉันรู้สึกว่า css ของคุณ (หรือโค้ดอื่น ๆ ที่โหลดควบคู่ไปกับ html หลัก) อาจยังไม่ได้รับการแยกวิเคราะห์อย่างสมบูรณ์
Zach Lysobey

6
@ZachL เอกสารอาจพร้อมก่อนที่ CSS จะแยกวิเคราะห์อย่างสมบูรณ์ document.ready จะไม่เหมือนกันเป็นonloadเหตุการณ์ที่มีภาพและสินทรัพย์ภายนอกอื่น ๆ ที่มีการโหลดเสร็จแล้ว
zzzzBov

ขอขอบคุณสำหรับการชี้แจง.
Zach Lysobey

5
"ไม่" แค่นี้ฉันเสียเวลาทำงาน 3 ชั่วโมง .. แค่ทำให้แน่ใจว่าคุณไม่ผิดพลาด </body> กับ <body> :)
teejay

1
ฉันไม่จำเป็นต้องเห็นด้วยกับการบังคับใช้นามแฝงโดยเฉพาะอย่างยิ่งหากnoConflict()จำเป็นต้องใช้ด้วยเหตุผลบางประการ
Jay Blanchard

22

ไม่ถ้าจาวาสคริปต์ของคุณเป็นสิ่งสุดท้ายก่อนปิดคุณไม่จำเป็นต้องเพิ่มแท็กเหล่านั้น

ตามหมายเหตุด้านข้างชวเลขสำหรับ $ (เอกสาร) แล้วคือรหัสด้านล่าง

$(function() {
// do something on document ready
});

คำถามนี้อาจจะดี คุณอ่านหรือไม่ jQuery: เหตุใดจึงต้องใช้ document.ready ถ้า JS ภายนอกที่ด้านล่างของหน้า


6
โดยพื้นฐานแล้วคำถามคือ "ฉันต้องมีเอกสารพร้อมหรือไม่เมื่อวางสคริปต์ไว้ที่ด้านล่างของเนื้อหา" ไม่ใช่ "มีวิธีการเขียนทางลัด$(document).ready()"
nnnnnn

4

ไม่จำเป็นถ้าคุณรู้ว่าคุณไม่มีสิ่งที่รอการตัดบัญชีเกิดขึ้นและในกรณีส่วนใหญ่คุณจะรู้ว่าคุณได้พัฒนาสิ่งที่คุณกำลังทำจากบนลงล่างหรือไม่

- คือเมื่อคุณนำรหัสของคนอื่นเข้ามาโดยไม่ได้ตรวจสอบอย่างละเอียดแสดงว่าคุณไม่รู้

ลองถามตัวเองว่าคุณกำลังใช้เฟรมเวิร์กหรือตัวแก้ไขที่ช่วยคุณในโครงสร้างหรือไม่? คุณนำรหัสของคนอื่นมาและคุณไม่ได้ใส่ใจที่จะอ่านแต่ละไฟล์หรือไม่? คุณพร้อมที่จะผ่านเมทริกซ์ระบบปฏิบัติการเบราว์เซอร์และเวอร์ชันเบราว์เซอร์ของการทดสอบโค้ดของคุณหรือไม่? คุณต้องการบีบทุกออนซ์จากรหัสของคุณหรือไม่?

document.ready () ทำให้หลาย ๆ คำถามไม่เกี่ยวข้อง document.ready () ได้รับการออกแบบมาเพื่อทำให้ชีวิตของคุณง่ายขึ้น มันมาพร้อมกับการแสดงที่ยอดเยี่ยม (และฉันกล้าพูดว่ายอมรับได้)


แค่บางอย่างที่ฉันเห็น - การแก้ไขรายการหนึ่งของคุณถูกปฏิเสธ แต่ก็ดูดีสำหรับฉัน คุณอาจต้องการส่งรายการนั้นอีกครั้ง: stackoverflow.com/review/suggested-edits/3224385
Qantas 94 Heavy

1

ฉันได้เห็นโพสต์อ้างอิง / บล็อกในอินเทอร์เน็ตเกี่ยวกับการใช้งานของ document.readyjQuery ในความคิดของฉันทั้งการใช้มันหรือการวางจาวาสคริปต์ทั้งหมดของคุณที่ด้านล่างของหน้านั้นใช้ได้ทั้งคู่ ตอนนี้คำถามจะเป็นอย่างไรดี? มันเป็นเพียงเรื่องของรูปแบบการเขียนโปรแกรม


0

ไม่จำเป็น คุณสามารถวางแท็กสคริปต์ไว้หน้าแท็กปิดเนื้อหาหรือหากคุณรองรับ IE9 + คุณสามารถใช้ JS เนทีฟได้

<script>alert('DOM Loaded!');</script>
</body>

<script>
document.addEventListener("DOMContentLoaded", function(event) { 
      // DOM has loaded ready to fire JS scripts
    });
</script>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.