我需要在元素上触发更改事件,而无需考虑元素值的更改方式。

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

使用下面的示例,我需要知道“ 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上。

最佳答案

触发事件

$(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]')

关于javascript - 通过其他代码更改数据时,文本框未触发Change事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15421638/

10-12 12:18
查看更多