为什么有错误

正在回答

登陆购买课程后可参与讨论,去登陆

8回答

你重新粘贴上来的代码没有补全哦,没有调用,把我给你修改的代码粘贴一下,你自己再测试一下:

//封装一个代替getElementById()的方法 

function byId(id) { return typeof(id) === "string" ? document.getElementById(id) : id; }

//全局变量 

var index = 0,

    timer = null,

    pics = byId("banner").getElementsByTagName("div"),

    len = pics.length;


function slideImg() {

    var main = byId("main");

    //划过清除定时器 离开继续 

    main.onmouseover = function() {

        //划过清除定时器 

    }

    main.onmouseout = function() {

        timer = setInterval(function() {

            index++;

            //len=3 0 1 2

            if (index >= len) { index = 0; }

            //切换图片 

            changeImg();

        }, 1000);

    }

    main.onmouseout();

}


function changeImg() {

    //遍历Banner下的div,将其隐藏 

    for (var i = 0; i < len; i++) {

        pics[i].style.display = "none";

    }

    //根据index索引找到当前div,将其显示出来

    pics[index].style.display = "block";

}

slideImg();


  • 慕粉2015574105 提问者 #1
    按照您的代码执行,还是那个错误 Uncaught TypeError: Cannot read property 'getElementsByTagName' of null at script.js:11 我用的谷歌啊,能是浏览器的问题么
    2018-03-27 10:58:12
  • 卡布琦诺 回复 提问者 慕粉2015574105 #2
    你把楼上老师给你的代码复制粘贴替换你本地的代码,然后清除浏览器的历史记录试试!
    2018-03-27 12:00:06
  • 慕粉2015574105 提问者 回复 卡布琦诺 #3
    试过了还是之前的错误, pics = byId("banner").getElementsByTagName("div"),这句话有问题么
    2018-03-27 14:19:47
提问者 慕粉2015574105 2018-03-26 19:13:27

//封装一个代替getElementById()的方法

function byId(id){

return typeof(id)==="string"?document.getElementById(id):id;

}

//全局变量

var index=0,

timer=null,

pics=byId("banner").getElementsByTagName("div"),

len=pics.length;

function slideImg(){

var main=byId("main");

//划过清除定时器 离开继续

main.onmouseover=function(){

//划过清除定时器

}

main.onmouseout=function(){

timer=setInterval(function(){

index++;//len=3 0 1 2

if(index>=len){

index=0;

}

//切换图片

changeImg();

},3000);

}

}

function changeImg(){

//遍历Banner下的div,将其隐藏

for(var i=0;i<len;i++){

pics[i].style.display="none";

}

//根据index索引找到当前div,将其显示出来

pics[index].style.display="block";

}


提问者 慕粉2015574105 2018-03-26 18:51:00
  • 重新测试了一遍,是没有这个报错的哦,可以把你修改之后的代码粘贴一下吗?
    2018-03-26 19:11:09
  • 提问者 慕粉2015574105 回复 好帮手慕星星 #2
    //封装一个代替getElementById()的方法 function byId(id){ return typeof(id)==="string"?document.getElementById(id):id; } //全局变量 var index=0, timer=null, pics=byId("banner").getElementsByTagName("div"), len=pics.length; function slideImg(){ var main=byId("main"); //划过清除定时器 离开继续 main.onmouseover=function(){ //划过清除定时器 } main.onmouseout=function(){ timer=setInterval(function(){ index++;//len=3 0 1 2 if(index>=len){ index=0; } //切换图片 changeImg(); },3000); } } function changeImg(){ //遍历Banner下的div,将其隐藏 for(var i=0;i<len;i++){ pics[i].style.display="none"; } //根据index索引找到当前div,将其显示出来 pics[index].style.display="block"; }
    2018-03-26 19:12:59
  • 提问者 慕粉2015574105 回复 好帮手慕星星 #3
    我粘到回答里了
    2018-03-26 19:14:14
好帮手慕星星 2018-03-26 17:49:42

测试了你粘贴的代码,并没有出现你说的那种错误,但是代码中有不对的地方:

1、你的 main.onmouseout函数写完之后应该调用一下,slideImg函数也应该调用。

2、给banner下的div隐藏的时候none是要加引号的哦,如果不加引号就是一个变量,就会报错。

http://img1.sycdn.imooc.com//climg/5ab8c1e600015f1d05030216.jpg

建议你使用主流浏览器再测试一下,例如:Chrome等。

  • 提问者 慕粉2015574105 #1
    我是用的谷歌啊,改过了none之后控制台还是报错 错误在回答里
    2018-03-26 18:50:49
提问者 慕粉2015574105 2018-03-26 17:35:30

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Document</title>

<link rel="stylesheet"  href="css/style.css">

</head>

<body>

<div class="main" id="main">

<div class="banner" id="banner">


<a href="">

<div class="banner-slide slide1 slide-active"></div>

</a>

<a href="">

<div class="banner-slide slide2"></div>

</a>

<a href="">

<div class="banner-slide slide3"></div>

</a>


</div>

<!-- 上一张 下一张按钮 -->

<a href="javascript:void(0)" class="button prev"></a>

<a href="javascript:void(0)" class="button next"></a>

<!-- 圆点导航 -->

<div class="dots">

<span class="active"></span>

<span></span>

<span></span>

</div>

</div>

<script src="js/script.js"></script>

</body>

</html>


提问者 慕粉2015574105 2018-03-26 17:35:05

*{margin:0;

padding:0;}

ul{

list-style: none;

}

body{

font-family: "微软雅黑";

color:#14191e;

}

.main{

width: 1200px;

height:460px;

margin:30px auto;

overflow:hidden;

position: relative;

}

.banner{

width: 1200px;

height:460px;

overflow:hidden;

position: relative;

}

.banner-slide{

width: 1200px;

height:460px;

position:absolute;

background-repeat: no-repeat;

display: none;

}

.slide-active{

display: block;

}

.slide1{

background-image: url("../img/bg1.jpg");

}

.slide2{

background-image: url("../img/bg2.jpg");

}

.slide3{

background-image: url("../img/bg3.jpg");

}

.button{

position:absolute;

width:40px;

height:80px;

left:244px;

top:50%;

margin-top: -40px;

background: url(../img/arrow.png) no-repeat center center;

}

.button:hover{

background-color:#333;

opacity: 0.8;

filter: alpha(opacity=80);

}

.prev{

transform:rotate(180deg);

}

.next{

left:auto;

right:0;

}

.dots{

position: absolute;

right:20px;

bottom: 24px;

text-align: right;

}

.dots span{

display:inline-block;

width:12px;

height: 12px;

border-radius: 50%;

margin-left: 8px;

line-height:12px;

background:rgba(7,17,27,0.4);

box-shadow:0 0 0 2px rgba(255,255,255,0.8) inset;

cursor: pointer;

}

.dots span.active{

box-shadow: 0 0 0 2px rgba(7,17,27,0.4) inset;

background:#fff;

}


提问者 慕粉2015574105 2018-03-26 17:34:40

//封装一个代替getElementById()的方法

function byId(id){

return typeof(id)==="string"?document.getElementById(id):id;

}

//全局变量

var index=0,

timer=null,

pics=byId("banner").getElementsByTagName("div"),

len=pics.length;

function slideImg(){

var main=byId("main");

//划过清除定时器 离开继续

main.onmouseover=function(){

//划过清除定时器

}

main.onmouseout=function(){

timer=setInterval(function(){

index++;//len=3 0 1 2

if(index>=len){

index=0;

}

//切换图片

changeImg();

},3000);

}

}

function changeImg(){

//遍历Banner下的div,将其隐藏

for(var i=0;i<len;i++){

pics[i].style.display=none;

}

//根据index索引找到当前div,将其显示出来

pics[index].style.display="block";

}


好帮手慕星星 2018-03-26 16:22:57

因为#banner下面直属的子元素是a标签,不是div标签哦。

  • 提问者 慕粉2015574105 #1
    老师视频里也是直接这么用的啊,为什么我的不行
    2018-03-26 16:30:02
  • 好帮手慕星星 回复 提问者 慕粉2015574105 #2
    可以把你现在的代码全部粘贴上来吗?可以更方便的给你解决问题哦。
    2018-03-26 16:46:07
  • 提问者 慕粉2015574105 回复 好帮手慕星星 #3
    我在回答里分别粘贴了html css js的代码,谢谢您了!
    2018-03-26 17:36:59
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师