ใช่โดยทั่วไปสิ่งที่คุณทำถูกต้องยกเว้นคุณลืมว่า JavaScript มีการซิงค์ในหลายกรณีดังนั้นคุณจึงเรียกใช้รหัสก่อนที่DOMจะโหลดขึ้นมามีวิธีแก้ไขดังนี้:
1) ตรวจสอบเพื่อดูว่าDOMโหลดเต็มจากนั้นทำสิ่งที่คุณต้องการคุณสามารถฟังDOMContentLoadedตัวอย่างเช่น:
<script>
document.addEventListener("DOMContentLoaded", function(event) {
console.log("DOM fully loaded and parsed");
});
</script>
2) วิธีที่พบบ่อยมากคือการเพิ่มแท็กสคริปต์ที่ด้านล่างของคุณdocument
(หลังแท็กเนื้อหา):
<html>
<head>
</head>
<body>
</body>
<script src="/bundle.js"></script>
</html>
3) การใช้window.onload
ซึ่งถูกไล่ออกเมื่อโหลดทั้งหน้า (img ฯลฯ )
window.addEventListener("load", function() {
console.log("Everything is loaded");
});
4) การใช้document.onload
ซึ่งถูกไล่ออกเมื่อDOMพร้อม:
document.addEventListener("load", function() {
console.log("DOM is ready");
});
มีตัวเลือกเพิ่มเติมให้ตรวจสอบว่าDOMพร้อมหรือไม่ แต่คำตอบสั้น ๆ คืออย่ารันสคริปต์ใด ๆ ก่อนที่คุณจะแน่ใจว่าDOMของคุณพร้อมในทุกกรณี ...
JavaScript ทำงานร่วมกับองค์ประกอบDOMและหากไม่พร้อมใช้งานจะส่งคืนnullสามารถทำลายแอปพลิเคชันทั้งหมด ... ดังนั้นโปรดตรวจสอบให้แน่ใจว่าคุณพร้อมที่จะเรียกใช้ JavaScript ของคุณก่อนที่จะทำ ...