为什么js文件不生效?

图片描述

图片描述

我这样写不对吗?为什么不能alert出来,请各位盆友看看

阅读 11.2k
11 个回答

js放到页面底部或者用onload包裹后
getElementsByClassName获取到的是类数组 要用循环

var wechat = document.getElementsByClassName("wechat");
for(var i=0;i<wechat.length;i++){
  wechat[i].onclick = function(){
    console.log(this)
  }
}

或者转换为数组使用数组的遍历方法

var wechat = document.getElementsByClassName("wechat");
wechat = Array.prototype.slice.call(wechat);
//or
wechat = Array.from(wechat);//兼容差
wechat.forEach(function(v){
  v.onclick = function(){
    console.log(this)
  }
})

你要等待dom加载完毕再加载js文件。不然你一开始加载js他获取不到dom,把文件放在body下面

document.getElementsByClassName("wechat")[0]

把 script 标签写到页面底部

document.getElementsByClassName("wechat")注意Elements是一个复数,所以获取到的是一个数组
这样写document.getElementsByClassName("wechat")[0],才可以获取到这个数组的第一个元素

let dom = document.getElementsByClassName("wechat")[0]
dom.onlick = function(){
  alert(1)
}

document.getElementsByClassName获取的是dom集合。

因为li的dom元素还没加载出来的手,就加载了js的脚本。因此执行无效。应该将js标签放在底下。或者将代码写在window.onload内:

window.onload=function(){
      //do something
}

document.getElementsByClassName
方法获取的是一个dom数组,数组是不具有onclick方法的,只有具体dom元素才会有,所以你要给wechat元素绑定onclick事件,有两种方法:

第一种:假如你只有换一个wechat元素,document.getElementsByClassName[0] 获取具体元素,然后绑定onclick

第二种:遍历document.getElementsByClassName所获取的数组,然后依次给每个元素绑定onclick事件

你需要了解一下浏览器解析过程,请将js脚本放置于body下。

这是Dreamweaver?

文档是从上往下加载的,浏览器加载js的时候还没解析到你的html部分,所以不生效。二种解决方法:
1、将js引入文件放在body的最末尾,</html>结束的前面
2、所以得js代码包含在window.onload=function(){}里,表示解析到这的时候等待,等页面资源加载完成后再继续执行。
还要一个问题就是,你获取元素的时候是根据class名获取的,想一想class和id的区别,class可以有多个,根据类名查找元素获取的应当是一个数组,这种时候你可以在末尾加上一个[0]或者换其他方式获取。同理getElementsByTagName也是一样的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题