做了个HTML静态页面,想实现文字按照不同的DIV块交替显示。
现在代码已经写好,一共4个DIV,显示到第二个DIV块:“产品大类B”的时候,就不动了,在IE中是显示网页中有错误:
document.getElementById(...)为空,或不是对象”   全部的HTML和JS代码段,分别如下,请大家指教一下,谢谢:一,html代码段:<html>
<head>
<title>test</title>
<link href="css/st.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/test.js"></script>
</head>
<body><div class="icompanyhot_m">
 <div class="icompanyhot_b">
  <div class="icompanyhot">
   <div class="ititle01">代理产品展示</div>
   <div class="icompanyhot_cont" id="desc1">
        <h2><a href="#" target="_self">产品大类A</a></h2>
            <p>1. 代理线等相关服务。 
               2. 可开...</p>
   </div>
   <div class="icompanyhot_cont" id="desc2" style="display:none">
        <h2><a href="#" target="_self">产品大类B</a></h2>
            <p>1. 代理 相关服务。
               2. 接受...</p>
   </div>
   <div class="icompanyhot_cont" id="desc3" style="display:none">
        <h2><a href="#" target="">产品大类C</a></h2>
            <p>公司拥有一支充满活力的、网络化和专...</p>
   </div>
   <div class="icompanyhot_cont" id="desc4" style="display:none">
        <h2><a href="#" target="_self">软件开发A</a></h2>
            <p>1. 自动进口许可证。
               2. 旧机出入...</p>
   </div>

   <h6 class="clear"></h6> 
   <div class="ifocus_list num">
        <a onmouseover="javascript:showit(1)" onmouseout="playit()" class="current" id="num1">01</a>
        <a onmouseover="javascript:showit(2)" onmouseout="playit()" class="link" id="num2">02</a>
        <a onmouseover="javascript:showit(3)" onmouseout="playit()" class="link" id="num3">03</a>
        <a onmouseover="javascript:showit(4)" onmouseout="playit()" class="link" id="num4">04</a>
   </div>
  </div>
 </div>
</div></body>
</html>
二,JS代码段(test.js文件)var MaxImg = 6;
var NowImg = 1;
var bStart = 0;
var bStop =0;    //如果鼠标点击相应的数字,则bStop的值为1,否则图片进行自动切换,bStop的值为0;
var begin;
function initialization(){
bStop =0;
var next = NowImg + 1;
if(next == MaxImg+1){
NowImg = MaxImg;
next = 1;
}  
if(bStop != 1){
if(bStart == 0){
bStart = 1;
begin = setTimeout('initialization()', 2000);
return;
}
else{
document.getElementById("desc" + next).style.display="";
document.getElementById("desc" + NowImg).style.display="none";
for (var i=1;i<7;i++){
  document.getElementById("num"+i).className="link";
if(i == next){
   document.getElementById("num"+i).className="current";
}
    while(next==7){
document.getElementById("num").className="link";
}
}
if(NowImg == MaxImg) 
NowImg = 1;
else
NowImg++;
}
begin = setTimeout('initialization()', 2000);
}
}function showit(x){
bStop=1;
clearTimeout(begin);
for (var i=1;i<=6;i++){
document.getElementById("desc" + i).style.display="none";
document.getElementById("num"+i).className="link";
if(i == x){
document.getElementById("desc" + i).style.display="block";
document.getElementById("num"+i).className="current";
}
}
}function playit(){
begin = setTimeout('initialization()', 2000);
}
begin = setTimeout('initialization()', 2000);
CSS代码段就不贴了。

解决方案 »

  1.   

    var MaxImg = 6;
    var NowImg = 1;
    var bStart = 0;
    var bStop =0;    //如果鼠标点击相应的数字,则bStop的值为1,否则图片进行自动切换,bStop的值为0;
    var begin;
    function initialization(){
        bStop =0;    
        var next = NowImg + 1;
        if(next == MaxImg+1){
            NowImg = MaxImg;
            next = 1;
        }     
        if(bStop != 1){
            if(bStart == 0){
                bStart = 1;    
                begin = setTimeout('initialization()', 2000);    
                return;
            }
            else{            
                document.getElementById("desc" + next).style.display="";
                document.getElementById("desc" + NowImg).style.display="none";
                for (var i=1;i<7;i++){
    var tmpa = document.getElementById("num"+i);
    if(!tmpa){
       continue;
    }
                     document.getElementById("num"+i).className="link";//这个位置num5,num6都没有 当然是null的了,我在他上边加了两行代码 你会明白,
                    if(i == next){
                      document.getElementById("num"+i).className="current";
                    }
                while(next==7){
                    document.getElementById("num").className="link";
                    }
                }            
                if(NowImg == MaxImg) 
                    NowImg = 1;
                else
                    NowImg++;        
            }        
            begin = setTimeout('initialization()', 2000);    
        }
    }function showit(x){
        bStop=1;
        clearTimeout(begin);
        for (var i=1;i<=6;i++){
            document.getElementById("desc" + i).style.display="none";//这个位置也是一样的问题!先不给改了
            document.getElementById("num"+i).className="link";//这个位置也是一样的问题!,当这个对象有时 ,才能使用属性,方法
            if(i == x){
                document.getElementById("desc" + i).style.display="block";
                document.getElementById("num"+i).className="current";
            }        
        }    
    }function playit(){    
        begin = setTimeout('initialization()', 2000);    
    }
    begin = setTimeout('initialization()', 2000);
      

  2.   

    id 只有 desc1 ~ desc4;
    showit(x)中的for循环却是从 1 ~ 6。
    前4个没问题,第5个开始当然找不到了。
    不信你可以试试:
    function showit(x){
        bStop=1;
        clearTimeout(begin);
        for (var i=1;i<=6;i++){
            alert(i+': '+document.getElementById("desc" + i));
            document.getElementById("desc" + i).style.display="none";//这个位置也是一样的问题!先不给改了
            document.getElementById("num"+i).className="link";//这个位置也是一样的问题!,当这个对象有时 ,才能使用属性,方法
            if(i == x){
                document.getElementById("desc" + i).style.display="block";
                document.getElementById("num"+i).className="current";
            }        
        }    
    }
      

  3.   

    确实是这个问题!第一段的代码改了,没再报错。可是这段里面我仿照你的方法改了,四个DIV显示完后,仍然报错,麻烦帮忙修改一下代码。谢谢:
    for (var i=1;i<=6;i++){
    var tmpB = document.getElementById("num"+i);//加了临时对象合法性的判断
                    if(!tmpB){
                       continue;
                    } document.getElementById("desc" + i).style.display="none";
    var tmpC = document.getElementById("num"+i);//加了个临时对象的判断
                    if(!tmpC){
                       continue;
                    } document.getElementById("num"+i).className="link";
      

  4.   

    function showit(x){
      bStop=1;
      clearTimeout(begin);
      for (var i=1;i<=4;i++){//我把这里的i改成4了,还是报错对象不存在,为什么呢
      document.getElementById("desc" + i).style.display="none";//这个位置也是一样的问题!先不给改了
      document.getElementById("num"+i).className="link";//这个位置也是一样的问题!,当这个对象有时 ,才能使用属性,方法
      if(i == x){
      document.getElementById("desc" + i).style.display="block";
      document.getElementById("num"+i).className="current";
      }  
      }  
    }
      

  5.   

    一样的错误原因,请检查 initialization() 里面的for循环。推荐学习一下jQuery,处理这种问题很容易。
      

  6.   


    谢谢!
    我这样理解的,一共4个DIV,我只要把initialization()里面的for循环数值改成4就不应该存在对象为空报错了,可是为什么事实上它还报错呢?代码段:
    var MaxImg = 4;
    var NowImg = 1;
    var bStart = 0;
    var bStop =0;    //如果鼠标点击相应的数字,则bStop的值为1,否则图片进行自动切换,bStop的值为0;
    var begin;
    function initialization(){
    bStop =0;
    var next = NowImg + 1;
    if(next == MaxImg+1){
    NowImg = MaxImg;
    next = 1;
    }  
    if(bStop != 1){
    if(bStart == 0){
    bStart = 1;
    begin = setTimeout('initialization()', 2000);
    return;
    }
    else{
    document.getElementById("desc" + next).style.display="";
    document.getElementById("desc" + NowImg).style.display="none";
    for (var i=1;i<4;i++){
    var tmpa = document.getElementById("num"+i);
                    if(!tmpa){
                       continue;
                    }
      document.getElementById("num"+i).className="link";
    if(i == next){
       document.getElementById("num"+i).className="current";
    }
        while(next==4){
    document.getElementById("num").className="link";
    }
    }
    if(NowImg == MaxImg) 
    NowImg = 1;
    else
    NowImg++;
    }
    begin = setTimeout('initialization()', 2000);
    }
    }
    function playit(){
    begin = setTimeout('initialization()', 2000);
    }
    begin = setTimeout('initialization()', 2000);function showit(x){
    bStop=1;
    clearTimeout(begin);
    for (var i=1;i<=4;i++){
    //alert(i+': '+document.getElementById("desc" + i));
    document.getElementById("desc" + i).style.display="none";
    document.getElementById("num"+i).className="link";
    if(i == x){
    document.getElementById("desc" + i).style.display="block";
    document.getElementById("num"+i).className="current";
    }
    }
    }
      

  7.   

    关于你改成4还报错的原因是 你那里的maxImage 设置的是6,怀疑这代码是否出自你手
      

  8.   


    你看上面了没?我把maxImage已经改成4了才回的贴。至于你之前回的帖子,我也改了,根本就解决不了问题。
      

  9.   

    document.getElementById("num").className="link";
    num
    后边少东西
      

  10.   


    谢谢这位同学,问题就在这里,改成下面这样后,不再报错:
    var MaxImg = 4;
    var NowImg = 1;
    var bStart = 0;
    var bStop =0;    //如果鼠标点击相应的数字,则bStop的值为1,否则图片进行自动切换,bStop的值为0;
    var begin;
    function initialization(){
    bStop =0;
    var next = NowImg + 1;
    if(next == MaxImg+1){
    NowImg = MaxImg;
    next = 1;
    }  
    if(bStop != 1){
    if(bStart == 0){
    bStart = 1;
    begin = setTimeout('initialization()', 2000);
    return;
    }
    else{
    document.getElementById("desc" + next).style.display="";
    document.getElementById("desc" + NowImg).style.display="none";
    for (var i=1;i<5;i++){
    var tmpa = document.getElementById("num"+i);
                    if(!tmpa){
                       continue;
                    }
      document.getElementById("num"+i).className="link";
    if(i == next){
       document.getElementById("num"+i).className="current";
    }
        while(next==5){
    document.getElementById("num"+i).className="link";
    }
    }
    if(NowImg == MaxImg) 
    NowImg = 1;
    else
    NowImg++;
    }
    begin = setTimeout('initialization()', 2000);
    }
    }
    function playit(){
    begin = setTimeout('initialization()', 2000);
    }
    begin = setTimeout('initialization()', 2000);function showit(x){
    bStop=1;
    clearTimeout(begin);
    for (var i=1;i<=4;i++){
    //alert(i+': '+document.getElementById("desc" + i));
    document.getElementById("desc" + i).style.display="none";
    document.getElementById("num"+i).className="link";
    if(i == x){
    document.getElementById("desc" + i).style.display="block";
    document.getElementById("num"+i).className="current";
    }
    }
    }