0
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()”时,效果很好,插入了三个元素。

4

1 回答 1

0

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

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

像下面这样重写函数。但请注意:每次值更改时都会插入选项卡的数量。这意味着:

  • 值更改为 1 --> 制作了一个选项卡
  • 值更改为 2 --> 生成了两个附加选项卡。

.

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);
             }
         }
     })

 }
于 2012-11-17T17:16:43.360 回答