请js大侠指教:(代码如下) 其他代码都没问题,但谷歌报错: Cannot read property 'indexOf' of null

function prepareSlideshow(){
if (!document.getElementById) return false;
if (!document.getElementsByTagName) return false;
var slideshow=document.createElement("div") //创建一个储存预备幻灯片的div
slideshow.setAttribute("id","slideshow")
var preview=document.createElement("img")//创建预备幻灯片
preview.setAttribute("id","preview")
preview.setAttribute("src","images/首页头部1.png")
slideshow.appendChild(preview)
var intro=document.getElementById("intro")//找到要插入滚动图片的前面一个元素
intro.parentNode.insertBefore(slideshow,intro)
var links=intro.getElementsByTagName("a")//遍历a标签
for(var i=0;i<links.length;i++){
links[i].onmouseover=function(){
var destination=document.getElementById("href")
if(destination.indexOf("move.html")!=-1){moveElement("preview",0,0,5)}//报错
if(destination.indexOf("tv.html")!=-1){moveElement("preview",-150,0,5)}//报错
if(destination.indexOf("radio.html")!=-1){moveElement("preview",-300,0,5)}//报错
if(destination.indexOf("music.html")!=-1){moveElement("preview",-450,0,5)}//报错
if(destination.indexOf("book.html")!=-1){moveElement("preview",-600,0,5)}//报错
}
}
}
addLoadEvent(prepareSlideshow);
:<div id="intro">
<ul>
<li ><a href="move.html">电影</a></li>
<li ><a href="tv.html">电视剧</a></li>
<li ><a href="radio.html">电台</a></li>
<li ><a href="music.html">音乐</a></li>
<li ><a href="book.html">音乐</a></li>
</ul>
</div>

js其他代码都没问题,但谷歌报错,是参数设置错误造成的,解决方法如下:

1、新建一个html页面,命名为test.html。

2、在test.html编写js代码,在try内使用错误的弹窗方法adddlert() ,在catch内捕捉错误信息,并把它显示在页面的p标签内。代码如下。

3、在浏览器运行test.html,在js中是没有adddlert()这个方法的,执行过程会出错,使用try catch成功捕获了错误,在页面提示了错误信息。

4、除了上面将错误写在页面上,还可以以弹窗的方式弹出错误信息。在test.html定义一个查看消息的按钮,点击按钮,执行try catch里的内容,如果js代码有错误,会以弹窗的形式显示错误信息。

5、在浏览器运行test.html,点击“查看消息”按钮执行js代码,因为在js中是没有adddlert()这个方法的,执行过程会出错,实现错误信息的弹窗显示。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-03-22
//这里输出测试一下是否为null;
var destination=document.getElementById("href");
alert(destination);

就算不是null,使用document.getElementById()方法获取到的也是一个dom节点对象,它也没有indexOf方法的。

再退一步来说,就算就使用的是getElementsByTagName()获取到一个dom节点列表数组。也不能使用indexOf(字符串);

//我猜想你可能是想判断href属性是否包含哪些字符:那么可以修改:
for(var i=0;i<links.length;i++){
    links[i].onmouseover=function(){
    var destination=links[i].href
    if(destination.indexOf("move.html")!=-1){moveElement("preview",0,0,5)}//报错
    if(destination.indexOf("tv.html")!=-1){moveElement("preview",-150,0,5)}//报错
    if(destination.indexOf("radio.html")!=-1){moveElement("preview",-300,0,5)}//报错
    if(destination.indexOf("music.html")!=-1){moveElement("preview",-450,0,5)}//报错
    if(destination.indexOf("book.html")!=-1){moveElement("preview",-600,0,5)}//报错
}
}

追问

按你改的然后报错Cannot read property 'href' of undefined
这是我的html代码,在补充问题里

追答//恩,我的错。由于闭包的原因导致的
 //把
 var destination=links[i].href
 //改为
 var destination=this.href

追问

好。我下自习了回去试试 先谢谢了

本回答被提问者和网友采纳
第2个回答  2017-03-22
destination你的这个对象没有获取到把,估计destination就是null