1

我需要一个更改事件来触发一个元素,而不考虑元素值是如何更改的。

我的用例是每当特定文本框更改值时,我都需要更改表单上的元素。问题是该元素由另一个按钮填充(一个日历按钮,允许用户选择一个日期,然后将其插入第一个文本框中)。

使用下面的示例,我需要知道“date1”何时更改,以便更新“date2”。 我不知道按钮的 ID——它是由另一个工具动态生成的——所以我不能附加任何东西。

我有以下 HTML:

 <input type="text" id="date1" value="" />
 <input type="button" id="but1" value="click me" />
 <br/>
 <input type="text" id="date2" value="" />

而这个javascript:

 $(function () {

     $("#but1").click(function () {
         $("#date1").val(new Date().toLocaleDateString());
     });

     $("#date1").change(function () {
         var d = new Date($("#date1").val());
         $("#date2").val(d.addDays(7));
     });

 });

 Date.prototype.addDays = function (days) {
     var current = this;
     current.setDate(current.getDate() + days);
     return current;
 };

这是我正在使用的 jsfiddle:http: //jsfiddle.net/mYWJS/7/

更新:我在 jsfiddle 示例中添加了一个 DIV 包装器,希望能激发另一个解决方案。我自己找不到使用它的方法,但我的 javascript 技能相当平庸。

关于 Fabricio 关于 DOM 突变的评论,是否有某种独立于浏览器的 DOM 突变解决方案?我无法肯定地预测将在这里使用的浏览器。我不太关心 IE6,但我见过的针对 DOM 突变的少数解决方案似乎都集中在 Chrome 上。

4

1 回答 1

1

触发事件

$(function () {

    $("#but1").click(function () {
        $("#date1").val(new Date().toLocaleDateString()).change();
    });

    $("#date1").change(function () {
        var d = new Date($("#date1").val());
        $("#date2").val(d.addDays(7));
    });

});

Date.prototype.addDays = function (days) {
    var current = this;
    current.setDate(current.getDate() + days);
    return current;
};

备用:

$("#date1").val(new Date().toLocaleDateString()).trigger('change');

编辑:鉴于您的澄清:

$(function () {
    $("#date1").next('input[type=button]').on('click',function () {
        $("#date1").val(new Date().toLocaleDateString()).change();
    });

    $("#date1").change(function () {
        var d = new Date($("#date1").val());
        $("#date2").val(d.addDays(7));
    });
});

Date.prototype.addDays = function (days) {
    var current = this;
    current.setDate(current.getDate() + days);
    return current;
};

注意:此示例将它们放在同一个表格单元格中。如果它在后续表格单元格中,请使用:

 $("#date1").next('td input[type=button]')
于 2013-03-14T23:29:00.740 回答