<body>
</body>
<script>
function change(e){
alert(e)
}function ss(){
var args=ss.arguments
         for(var i=0;i<args.length;i++)
           {
    var sele =document.createElement("select")
            document.body.appendChild(sele)
            for (var j=1; j <args[i].length; j++)
            {sele.options.add(new Option(args[i][j], (j-1)));}
sele.onchange = function(){change(sele.selectedIndex)}; 
           } 
}var s1=[1,"人族","兽族","不死族","精灵族"]
ss(s1)
</script>
把上面的代码化简后  又可以正常的alert()出来
请个位大虾指教下错在什么地方了   谢谢 !~~

解决方案 »

  1.   

    {sele.options.add(new Option(args[i][j], (j-1)));}
                          sele.onchange = function(){[color=#00FF00]change(sele.selectedIndex
    )}; 
                       }     //第一个菜单的生成方式[/color]你在这一段代码中调用了change函数 而change函数就是alert(弹出提示框)的。你的代码大概的执行是先生成了菜单,单击第一个菜单,执行change函数 没有继续调用改变第二个菜单的代码 而只是alert了。
      

  2.   

    刚刚想多加一种颜色了  搞多了代码  你看这里吧
    {sele.options.add(new Option(args[i][j], (j-1)));} 
                          sele.onchange = function(){change(sele.selectedIndex)}; 
                      }    //第一个菜单的生成方式[/color] 你在这一段代码中调用了change函数 而change函数就是alert(弹出提示框)的。 你的代码大概的执行是 先生成了菜单,单击第一个菜单,执行change函数 没有继续调用改变第二个菜单的代码 而只是alert了。
      

  3.   

    变量作用域问题,可以用中间变量等方法代替<body>
    </body>
    <script>
    function change(e){
    alert(e)
    }function ss(){
    var args=ss.arguments
    var big 
    var o  //判断是不是已经生成了菜单,
    for(var i=1;i<args.length;i++)
    {
      big=(args[i][0]>args[0][0]?args[i][0]:args[0][0])
    }   //得到是几级联动
       for(var i=0;i<args.length;i++)
       {
          for(var k=1;k<=big;k++)   //根据big生成不同级别的菜单
             {
            
                    if(args[i][0]==k&&k==1)
                       {
                          var sele =document.createElement("select")
                          document.body.appendChild(sele)
                          for (var j=1; j <args[i].length; j++)
                          {sele.options.add(new Option(args[i][j], (j-1)));}
                          //sele.onchange = function(){change(sele.selectedIndex)}; 
                          sele.onchange = (function(i){return function (){change(i.selectedIndex)}})(sele)
                       }     //第一个菜单的生成方式
                           if(args[i][0]==k&&k!=1)
                       {  
                          if(o!=args[i][0])  
                            { 
                               o=args[i][0]
                               var sele =document.createElement("select")
                               document.body.appendChild(sele)
                               for (var j=1; j <args[i].length-1; j++)
                              {sele.options.add(new Option(args[i][j], (j-1)));}
                       }//剩下菜单的生成方式
              }  
            }
       }
    }var s1=[1,"人族","兽族","不死族","精灵族"]
    var s2=[2,"大法师","山丘之王","血法师","怕拉顶",1]
    var s3=[2,"先知","牛头人酋长","地狱咆哮-剑圣","xiaoYY",2]
    ss(s1,s2,s3)
    </script>
      

  4.   

    4楼的大虾
    您的这中写法没见过  sele.onchange=(...)(....)        PS:真的是第一次见到!!~~~
    我太菜了     
    可否告诉一下  我该看一下什么资料才能理解你的写法了????