QuerySelectorAll在放入外部js文件时不起作用
QuerySelectorAll not working when put in an external js file
当我放入以下代码时:
window.onload = function(){
var inputs = document.querySelectorAll("input[type=text]");
console.log(inputs.length);
for(var j=0; j<inputs.length; j++){
inputs[j].onclick = function(){
this.style.width = "500px";
}
}
}
在html页面中,它工作得很好,但如果我把它放在一个外部.js文件中,for循环永远不会以inputs.length等于0开始,即使在调用脚本的页面中有很多输入。可能是什么问题?
更新:我发现代码在正常情况下可以工作,但它不工作:
包含在先前隐藏的div中的输入然后通过js显示我的错误,隐藏的输入类型为"电子邮件"对于每一个输入,如果它们是通过ajax加载的,我发现了原因:因为该函数只有在窗口加载时才会启动,所以它看不到加载的输入
通常,脚本标记的位置会影响DOM的选择。因此,请确保您的脚本标记位于html文件的底部,刚好位于body标记的末尾之前。也许这会解决问题!
尝试使用addEventListener附加函数,而不是设置window.onload
:
window.addEventListener(function() {
//...
});
如果这解决了您的问题,那么正如@adeneo所说,window.onload将被分配到脚本的其他位置,从而覆盖它可能具有的任何其他值
这就是为什么一般来说,使用addEventListener
更好,因为您可以随心所欲地调用它,而不会覆盖任何内容。
但问题也可能只是你的脚本根本没有被评估,你有没有尝试在其中放入一些顶级的console.log
?
在评论/回答的用户的帮助下,我发现我尝试代码的一些输入类型是"电子邮件",而不是"文本",而在其他情况下,输入是通过ajax加载的,所以在加载DOM之后。为了解决这些问题,我编辑了
var inputs = document.querySelectorAll("input[type=text]");
至
var inputs = document.querySelectorAll("input[type=text],input[type=email]");
当通过ajax加载的内容准备就绪时,我再次调用了该函数。
相关文章:
- AJAX上传文件不起作用
- 在Hapi.js中提供静态JavaScript文件不起作用
- 从HTML链接时,Javascript文件不起作用
- Haskell调用Node.js文件不起作用
- Expressjs 静态文件不起作用
- 基于屏幕大小的动态包含文件不起作用
- 我的AJAX文件不起作用
- 编辑器导出的json文件不起作用
- 第一次用部分调用 Angular js 文件不起作用
- 使用 API 下载文件不起作用
- Ionic + Cordova InappBrowser - 输入类型=文件不起作用
- 路径 lo 加载本地主机子文件夹中的文件不起作用.js仅在基路径中
- 使用 multer (nodeJs) 上传文件不起作用
- .php和.html文件和外部文件不起作用
- 聚合物项目材料设计下载文件不起作用
- 本地 js 文件不起作用
- 作为触发器的 Jquery 输入类型文件不起作用
- 链接到外部.js文件不起作用
- 复制的文件不起作用 - ID在不同页面HTML JavaScript PHP中不起作用
- 使用触发器“单击”下载附加到 的多个 CSV 文件不起作用