先看代码:
    for (var i = 0; i < 4; i++)
    {    
        alert(${userList[3].username});//可以得到值,如为张三
                      alert(${userList[i].username});//i为:0,1,2,3都得不到值,值均为空   
    }为何第二个得不到值呢?i不是为,0,1,2,3吗?而单独的直接写却可以得到,百思不解,请高人指教..

解决方案 »

  1.   


    for (var i = 0; i < 4; i++) 
      {    
       (function(i){
    alert(${userList[i].username});
    })(i)
      
      }
      

  2.   

    ${userList[i].username}
    是你的EL绑定吧?
    里面的i不是JS里的i...
      

  3.   

    这是js中的代码,其它的也没什么的了,userList存放的对象自然是User对象了,username是对象的一个属性.后台得到userList后,通过:request.setAttribute("userList", userList);传到前台的.
      

  4.   

    这是闭包问题,楼上的代码应该就没问题了, for (var i = 0; i < 4; i++) 这里保存不到i<4的值,使用闭包可解决变量保存问题
      

  5.   

    补充下,我有用jquery,若能用这个来解决也行,先谢过各位了...
      

  6.   

    先把他转成JS对象如
    先定义JS变量:var uesrList = new Array();
    做个循环EL的循环(不知道你用哪一套实现.所以说不了.)循环这样句;
    <script>userList.push({userList[i].username})</script>
    此时循环的i是EL循环中的i
      

  7.   

    alert(document.getElementById(userList[i]).username)
      

  8.   

    这不是闭包不闭包的问题,用JS循环后台代码,怎么可能得到呢LZ查看一下页面源文件,就知道怎么回事了
    LZ可以这么做,在后台for(0-3),把userList[i].username放到一个String中,以逗号隔开
    (比如:String userNames = "张三,李四,王五,小名";)
    将这个String传到页面var userNames = ${userNames};
    var userNameArr = userNames.split(",");
    for(0-3){
    alert(userNameArr[i]);
    }
      

  9.   

    这样做肯定是可以的了,由于后台直接得到的是list<User>,再转化为字符串再传到前台,感觉麻烦点,
    不知道除了你这样,js中,有没办法直接对List进行处理的呢?
      

  10.   

    前台是没法直接处理后台数据的.必须先转化.
    或者你可以先用JAVA转换类转成JSON这样的形式.
    再直接用EL表达式获取.
    那么页面上夹杂的后台代码就没那么复杂.
      

  11.   

    9楼natineprince兄弟的办法也可以总之就是想办法将userList里的信息先存到JS变量中,然后才可以用JS循环或者就是直接用EL的循环LZ用的是什么模板语言?
      

  12.   

    仿楼主的代码写一个例子。var userList=[{username:"张三"},{username:"李四"},{username:"王五"}];
    for(var i=0;i<userList.length;i++){
    alert(userList[i].username);
    }