iteye_11440 2010-12-15 16:50
浏览 204
已采纳

关于javascript赋值的问题

需求很简单,但总是找不到它为什么会这样!
需求是点击A中的某个元素,在B中复制显示这个元素,但,结果总是最后一个元素,请各位帮忙一下?
[code="HTML"]

      [/code]
      [code="javaScript"]
      var left = document.getElementById("left");
      var right = document.getElementById("right");
      function aa(){

      for(var i=0;i<10;++i){
      var li = document.createElement("li");
      li.style.listStyleType="none";
      li.innerHTML="aaaa"+i;
      li.style.cursor = "hand";
      li.setAttribute("test",i);
      li.onclick=function()
      {
      copyli(li);
      };
      left.appendChild(li);

          }
      

      }
      function copyli(obj)
      {
      var li=document.createElement("li");
      li.style.listStyleType="none";
      li.innerHTML=obj.innerHTML;
      right.appendChild(li);
      }
      [/code]

      • 写回答

      2条回答 默认 最新

      • cyrilluce 2010-12-15 18:19
        关注

        [code="js"]
        var left = document.getElementById("left");
        var right = document.getElementById("right");
        function aa(){
        // 用于创建回调的方法,使用闭包保存当前传入的值
        var createCb = function(dom){
        return function(){
        copyli(dom);
        };
        };

        for(var i=0;i<10;++i){
        var li = document.createElement("li");
        li.style.listStyleType="none";
        li.innerHTML="aaaa"+i;
        li.style.cursor = "hand";
        li.setAttribute("test",i);
        /*li.onclick=function()
        {
        copyli(li); // <---JS中变量是函数级的,for循环内外定义效果是一样。所以这里所有的onclick执行时都是访问同一个li变量。
        };*/
        // 改为这样:
        li.onclick=createCb(li); //
        left.appendChild(li);

            }
        

        }
        function copyli(obj)
        {
        var li=document.createElement("li");
        li.style.listStyleType="none";
        li.innerHTML=obj.innerHTML;
        right.appendChild(li);
        }

        [/code]

        本回答被题主选为最佳回答 , 对您是否有帮助呢?
        评论
      查看更多回答(1条)

      报告相同问题?

      悬赏问题

      • ¥15 YoloV5 第三方库的版本对照问题
      • ¥15 请完成下列相关问题!
      • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
      • ¥15 求daily translation(DT)偏差订正方法的代码
      • ¥15 js调用html页面需要隐藏某个按钮
      • ¥15 ads仿真结果在圆图上是怎么读数的
      • ¥20 Cotex M3的调试和程序执行方式是什么样的?
      • ¥20 java项目连接sqlserver时报ssl相关错误
      • ¥15 一道python难题3
      • ¥15 牛顿斯科特系数表表示