Javascript only working when inside the html document
本问题已经有最佳答案,请猛点这里访问。
我试着让一个数组填充下拉列表,我从下面的文章中得到了这个例子:javascript-用数组填充下拉列表
我正在使用此HTML:
1 2 3 | <select id="selectNumber"> <option>Choose a number</option> </select> |
用这个JS
1 2 3 4 5 6 7 8 9 10 | var select = document.getElementById("selectNumber"); var options = ["1","2","3","4","5"]; for(var i = 0; i < options.length; i++) { var opt = options[i]; var el = document.createElement("option"); el.textContent = opt; el.value = opt; select.appendChild(el); }? |
但只有当我将JS放在HTML文档中时,它才起作用,如果我将JS放在单独的文件中,它会在chrome中给出这个错误:
1 | >Uncaught TypeError: Cannot read property 'appendChild' of null at g.js:8 |
我也尝试过这个,但同样的事情发生了:
1 2 3 4 5 6 7 8 9 10 | var select = document.getElementById("selectNumber"); var options = ["1","2","3","4","5"]; for(var i = 0; i < options.length; i++) { var opt = options[i]; var el = document.createElement("option"); el.text = opt; el.value = opt; select.add(el); }? |
只有当我把代码放在HTML文件中时,代码才起作用,但是如果我把它放在一个单独的文件中,它就会给我这个错误。
你知道为什么吗?
您应该在主体的末尾加载JS文件。这将确保您要查找的元素存在于您的DOM中。
这可以通过使用就绪检查来避免。本机JavaScript示例:
1 2 3 | document.addEventListener("DOMContentLoaded", function(event) { //do work }); |
尝试使用
1 2 3 | $( document ).ready(function() { //set your code }); |
jQuery方法
$(())= {//DOM就绪,我这里的代码可以访问DOM})
1 | <script src="filename.js"> |
如果问题仍然存在,请尝试在head标记中添加此项。确保已将JS文件与HTML文件放在同一文件夹中。