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 所以我想我必须使用 id 而不是 txtDate + 计数器(即 txtDate2),但是我不确定这是正确的方法。所以基本上,我如何告诉按钮当它添加新行时,它只会将默认日期设置为新行并且不应该更改前一行的当前值?

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;

在所有函数中,否则它不是全局变量,而且,它在每次按钮单击时重置为值 1,并且所有按钮都具有相同的 id。

然后,需要通过引用 id 来分配值:

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

否则,该类的所有输入都将被重置。

于 2012-11-20T10:23:08.617 回答
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 回答