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" に追加すると、要素が 1 つだけ挿入されますが、実際には 3 つあるはずですが、このコードの追加は置換のように実行されます。なぜですか? そして、ループ終了前に「origin = origin.clone()」を追加すると、3つの要素が挿入されてうまくいきました。

4

1 に答える 1

0

テンプレートを 1 回だけ複製します。つまり、既に存在する場所に 'origin' を 2 回追加します。あなたが望むもの(または私があなたが望むと思うもの)を得るには、クローニングがループになければなりません。

さらに、「var」なしで「tabcount」などの変数を定義すると、GLOBAL スペースが汚染されることに注意してください。ソースコードでも修正しました。

以下のように関数を書き直してください。ただし、注意してください。値が変更されるたびに、大量のタブが挿入されます。つまり、次のことを意味します。

  • 値が 1 に変わります --> 1 つのタブが作成されます
  • 値が 2 に変更 --> 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 に答える