0

私がやろうとしていることを説明する方法がわからないので、コードの短いバージョンを次に示します。

var counter = 1;
    var currDate = new Date(),
    today = (currDate.getMonth() + 1) + '/' + currDate.getDate() + '/' + currDate.getFullYear();
    $("#btnAdd").click(function (event) {
        addRow = "<tr><td><input type='text' class='dateClass defaultDate' id='txtDate" + counter + "'/></td></tr>";
        event.preventDefault();
        counter++;
        $("#tblName").append(addRow);
        $("#txtDate" + counter).val(today);
        $(".dateClass").datepicker();
    });

動的に追加された行には、ユーザーが選択する日付のテキストボックスが含まれていますが、デフォルトでは、この値は現在の日付になります。さて、私の問題は、行の追加ボタンをクリックするたびに、前のテキストボックスの値が、別の日付を既に設定しているにもかかわらず、デフォルトの日付に戻ってしまうことです。

追加された各行には defaultDate というクラス名が付けられるため、代わりに txtDate + カウンター (つまり txtDate2) の ID を使用する必要があると考えましたが、それが正しい方法かどうかはわかりません。基本的に、新しい行を追加するときに、デフォルトの日付を新しい行に設定するだけで、前の行の現在の値を変更しないことをボタンに伝えるにはどうすればよいですか?

4

3 に答える 3

2

変な順番でやってる

  1. カウンターを利用する
  2. インクリメントカウンター
  3. カウンターを再度使用する

問題は、上記の 3. までにインクリメントされていることです。この行を移動するだけです:

counter++

この行の後まで:

$("#txtDate" + counter).val(today);

実際の例: http://jsfiddle.net/Nmk39/

于 2012-11-20T10:43:36.637 に答える
1

これを試してみてください

   var counter = 1;
        var currDate = new Date(),
        today = (currDate.getMonth() + 1) + '/' + currDate.getDate() + '/' + currDate.getFullYear();
        $("#btnAdd").click(function (event) {
            addRow = "<tr><td><input type='text' class='dateClass defaultDate' value='"+today+"'id='txtDate" + counter + "'/></td></tr>";
            event.preventDefault();
            counter++;
            $("body").append(addRow);
            $(".dateClass").datepicker();
        });
于 2012-11-20T10:37:42.783 に答える
1

カウンターの定義を入れてみてください

var counter = 1;

それ以外の場合はグローバル変数ではなく、ボタンをクリックするたびに値1にリセットされ、すべてのボタンが同じIDを持ちます。

次に、ID を参照して値を割り当てる必要があります。

$("#txtDate" + counter).val(today);

それ以外の場合、クラスのすべての入力がリセットされます。

于 2012-11-20T10:23:08.617 に答える