本帖最后由 epwqgdnbrh 于 2012-09-29 16:04:33 编辑

解决方案 »

  1.   

     buttons[i].onclick=function(){
                    change(box,att[this.index],val[this.index]);
                                    //这里为什么用att[i],val[i]获取不到值呢,求解释
                }这个box 失效了 这些写 buttons[i].onclick=function(){
     var box=document.getElementById("box");
                    change(box,att[this.index],val[this.index]);
                                    //这里为什么用att[i],val[i]获取不到值呢,求解释
                }
      

  2.   

    不好意思。。看错。。代码是没有问题的。。
    确保id=box容器有没有?
      

  3.   

    你 吧 this.index  alert一下 就知道了 这个值 不存在吧
      

  4.   

    buttons[i].index已经给button对象赋值了把
      

  5.   

    代码没有问题,我就是想知道为什么直接用att[i],val[i]获取不倒值呢
      

  6.   


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>控制div属性</title>
    <style>
    #outer{width:500px;margin:0 auto;padding:0;text-align:center;}
    #div1{width:100px;height:100px;background:black;margin:10px auto;display:block;}
    </style>
    <script>
    var changeStyle = function (elem, attr, value)
    {
    elem.style[attr] = value
    };
    window.onload = function ()
    {
    var oBtn = document.getElementsByTagName("input");
    var oDiv = document.getElementById("div1");
    var oAtt = ["width","height","background","display","display"];
    var oVal = ["200px","200px","red","none","block"]; for (var i = 0; i < oBtn.length; i++)
    {
    oBtn[i].index = i;
    oBtn[i].onclick = function ()
    {
    this.index == oBtn.length - 1 && (oDiv.style.cssText = "");
    changeStyle(oDiv, oAtt[this.index], oVal[this.index])
    }
    }
    };
    </script>
    </head>
    <body>
    <div id="outer">
    <input type="button" value="变宽" />
    <input type="button" value="变高" />
    <input type="button" value="变色" />
    <input type="button" value="隐藏" />
    <input type="button" value="重置" />
    <div id="div1"></div>
    </div>
    </body>
    </html>var changeStyle = function (elem, attr, value)
    {
    elem.style[attr] = value
    };

    主要是这个函数,它改变的是div的style的属性值通过传不同的参数,改变div的大小,颜色
      

  7.   

    明白怎么回事了,for循环为每个按钮添加onclick事件,由于没有被触发,所以当触发单击事件时,for循环已经结束,此时由于i++,i=5,所以当函数中用att[i]调用时,实际是att[5],这个元素不存在!
      

  8.   

    闭包问题,你若想直接使用i值        (function(i){
                buttons[i].onclick=function(){
                    change(box,att[i],val[i]);
                }
            })(i)
      

  9.   

    貌似还是不可以的。
    不过还有个问题,
    #div{height:200px;width:200px;display:block;background:red;}
    如果在js中对上边这个div的style属性进行了修改
    然后执行div.style.cssText=""这个语句
    为什么div又可以按原来的方式呈现了
    难道那句话只是清除后来加上的属性?
      

  10.   

    不可以??我不知道你的测试环境是什么样子的,拿下面的试试
    <script type="text/javascript">
    var change=function(elem,att,val){
        elem.style[att]=val;
    }
    window.onload=function(){
        var buttons=document.getElementById("myinput").getElementsByTagName("input");
        var box=document.getElementById("box");
        var att=["height","width","backgroundColor","display","display"];
        var val=["200px","200px","red","none","block"];
        for(var i=0;i<5;i++){
            (function(i){
                buttons[i].onclick=function(){
                    change(box,att[i],val[i]);
                }
            })(i)
        }
    }
    </script><div id="box"></div>
    <div id="me">
    <input type="button" value='set1'  />
    <input type="button" value='set2' />
    <input type="button" value='set3'  />
    <input type="button" value='set4' />
    <input type="button" value='set5'  />
    </div>
      

  11.   

    win7旗舰版,ie8和chrome都不可以啊
      

  12.   

    不好意思,发贴时临时改了下面div的命名,但代码里忘了更正了,将
    var buttons=document.getElementById("myinput").getElementsByTagName("input");
    修改为:
    var buttons=document.getElementById("me").getElementsByTagName("input");
    测试环境:IE6~IE8,FF,Chrome,Safari均通过。你最好是把代码拿去单独测试