jquery追加执行链接替换

时间:2012-11-17 17:09:05

标签: javascript jquery

inputTabTitle: function(){
   origin = template.clone();
   $("#inputTabCount").change(function(){
     tabcount = parseInt($("#inputTabCount").val());
     if(tabcount > 0){
       tab = origin.find("label").text();
       for(i = 1; i <= tabcount; i ++){
         origin.find("label").text(tab + i);
         origin.find("label").attr("for", "inputTabTitle" + i);
         origin.find("input").attr("id", "inputTabTitle" + i);
         $("#tabCount").append(origin);
       }
     }
   })
 }

设置n = 3

当附加到“#tabCount”时,只有一个元素插入,实际上应该是三个。但是这个代码追加执行就像替换。为什么? 当我在循环结束之前添加“origin = origin.clone()”时,它运行良好,插入了三个元素。

1 个答案:

答案 0 :(得分:0)

您只能克隆一次模板。这意味着:两次将“原点”附加到已经存在的地方。 为了获得,你想要的(或者我认为你想要的),克隆必须在循环中。

当你定义诸如'tabcount'之类的变量而没有'var'时,请进一步注意污染GLOBAL空间。我也在你的源代码中解决了这个问题。

重写下面的功能。 但要注意:每次值更改时都会插入标签数量。这意味着:

  • 值更改为1 - &gt;制作一个标签
  • 值更改为2 - &gt;制作了两个附加标签。

inputTabTitle: function(){   
    $("#inputTabCount").change(function(){
        var tabcount = parseInt($("#inputTabCount").val());

        if(tabcount > 0){
            tab = template.find("label").text();

            for(i = 1; i <= tabcount; i ++){
                var origin = template.clone();

                origin.find("label").text(tab + i);
                origin.find("label").attr("for", "inputTabTitle" + i);
                origin.find("input").attr("id", "inputTabTitle" + i);

                $("#tabCount").append(origin);
             }
         }
     })

 }