本帖最后由 mbn1234 于 2012-07-05 10:16:45 编辑

解决方案 »

  1.   

    你这段代码有错误,而且没有任何意义
    if(document.getElementById('mycars[i]').style.display = "")//这里应该是判断语句,而你使用的是赋值语句
    {
    }
    else{
    document.getElementById('mycars[i]').style.display = "none";//display本身就是none了,你这句话又有什么用呢
    }
    另外document.getElementById('mycars[i]')这里面的单引号可以去掉
      

  2.   

    楼上说的是一个写法的错误,但做多导致判断恒为真,不至于出错真正会出错的地方是
    for (i=0;i<=mycars.length;i++)
    {
    if(document.getElementById('mycars[i]').style.display = "")//这句会报对象为null
    {
    }
    else{
    document.getElementById('mycars[i]').style.display = "none";//同上,获取不到html对象
    }
    }页面加载从上到下,这儿写在全局的js会在html元素加载前执行,这时没有生成dom对象,所以获取到的对象是null,
    这样改:setTimeout(function(){
    for (i=0;i<=mycars.length;i++)
    {
    if(document.getElementById('mycars[i]').style.display =="")
    {
      
    }
    else{
    document.getElementById('mycars[i]').style.display = "none";
    }}},100});
    用延时执行的方式避免这个错误
      

  3.   

    哦 对,单引号要去掉setTimeout(function(){
    for (i=0;i<=mycars.length;i++)
    {
    if(document.getElementById(mycars[i]).style.display =="")
    {
       
    }
    else{
    document.getElementById(mycars[i]).style.display = "none";
    }}},100});
      

  4.   

    给你个类似的例子
    <html>
    <style> 
    body{background:url('会议室图片/mainbk.jpg') no-repeat center; background-color:#000000}
    #test,#test2,#test3{
    width:170px;
    height:158px;
    float:left;
     
    }
    #test{background-image:url(会议室图片/hyms.jpg);}
    #test2{background-image:url(会议室图片/tyms.jpg);margin-left:50px}
    #test3{background-image:url(会议室图片/wrms.jpg);margin-left:60px}
    </style>
    <script> 
     
    function changeImg_over(value){
      var div = document.getElementById("test");
      var div2 = document.getElementById("test2");
      var div3 = document.getElementById("test3");
      if(value=="a"){
          div.style.backgroundImage = "url(会议室图片/hyms_on.jpg)";
      }
      else if(value=="b"){
          div2.style.backgroundImage = "url(会议室图片/tyms_on.jpg)";
      }
     else {
          div3.style.backgroundImage = "url(会议室图片/wrms_on.jpg)";
      }
      
    }
    function changeImg_out(value){
    var div = document.getElementById("test");
      var div2 = document.getElementById("test2");
      var div3 = document.getElementById("test3");
      if(value=="a"){
          div.style.backgroundImage = "url(会议室图片/hyms.jpg)";
      }
      else if(value=="b"){
          div2.style.backgroundImage = "url(会议室图片/tyms.jpg)";
      }
      else{
          div3.style.backgroundImage = "url(会议室图片/wrms.jpg)";
      }
    }
     
    </script>
    <body>
    <div style="margin-left:350px; margin-top:200px">
    <div id="test"  onmouseover="changeImg_over('a')"  onmouseout="changeImg_out('a')"></div>
    <div id="test2" onMouseOver="changeImg_over('b')"  onmouseout="changeImg_out('b')"></div>
    <div id="test3" onMouseOver="changeImg_over('c')"  onmouseout="changeImg_out('c')"></div>
    </div>
     
    </body>
    </html>比你那个看起来舒服吧
      

  5.   

    一个用户只允许连续回复三次,我郁闷了,刚刚写错了都不能改,谢谢楼上回复了一下
    setTimeout(function(){
     for (i=0;i<=mycars.length-1;i++)//这儿差点看掉了,晕,用<=数组的长度就索引超出了
     {
      if(document.getElementById(mycars[i]).style.display =="")//这儿要用比较符号==,同时去掉单引号
      {
        
      }
      else{
       document.getElementById(mycars[i]).style.display = "none";
      } }
    },100);不仔细点这段代码都改不对,...
      

  6.   

    你说的这些错误我上面都已经指出来了,而且现在的问题是它这段代码没有任何意义,显示的依旧显示,不显示的依旧不会显示,不信你看看这段代码  if(document.getElementById(mycars[i]).style.display =="")//这儿要用比较符号==,同时去掉单引号
      {
        
      }
      else{
      document.getElementById(mycars[i]).style.display = "none";
      }
      

  7.   

    函数调用不需用setTimeout,代码上2点错误上面已经说了(变量引用无需引号,比较符号==),主要是设计函数时要想清楚要显示哪些对象,要隐藏哪些对象,下面是改写的例子。
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title></title>
    <script type="text/javascript">
    //id:要显示的对象id
    function changeBody(id){
        var mycars=["iDBody1","iDBody2","iDBody3"];
        for(var i=0,len=mycars.length;i<len;i++){
            var _id=mycars[i],obj=document.getElementById(_id);
            if(id==_id) obj.style.display="";  //如果等于指定的id,则显示对象
            else obj.style.display="none";     //其他的隐藏
        }
    }
    </script>
    </head>
    <body>
     
    <a href="#" onmousemove="changeBody('iDBody1')">模块A</a>
    <a href="#" onmousemove="changeBody('iDBody2')">模块B</a>
    <a href="#" onmousemove="changeBody('iDBody3')">模块C</a><ul style="list-style: none;"><li style="display: none;float: left;" id="iDBody1">
        模块(一)的相关内容
    </li><li style="display: none; float: left;" id="iDBody2">
        <a href="#">模块(二)的相关内容</a>
        <ul style="list-style: none;">
        <li style="float: left"><a href="#">dsfldsfdsflk&nbsp;</a> </li>
        <li style="float: left"><a href="#">dsfdsfdssd&nbsp;</a></li>
        </ul>
    </li><li style="display: none;float: left;" id="iDBody3">
        模块(三)的相关内容
    </li></ul>
    </body>
    </html>
      

  8.   

    哦 的确,是我看错了,本来就是在函数里面的,不需要用setTimeout延时执行的
      

  9.   

    if(document.getElementById('mycars[i]').style.display = "")
    {
       
    }
     就是不管你的DIV是显示还是隐藏、都会进入你的else方法啊...
      

  10.   

    function changeBody() {
            var mycars = new Array()
            mycars[0] = "iDBody1"
            mycars[1] = "iDBody2"
            mycars[2] = "iDBody3"
            for (i = 0; i < mycars.length; i++) {
                if (document.getElementById(mycars[i]).style.display == "") {
                }
                else {
                    document.getElementById(mycars[i]).style.display = "none";
                }        }
        }