通过Javascript更改元素后的JQuery On事件

时间:2014-09-26 11:08:05

标签: javascript jquery validation

我正在尝试创建一个jquery插件来进行自定义验证。

我有一个jqueryUI日期选择器,可以在输入字段中输入日期。

我正在尝试将一个on change事件附加到由日期选择器填充的输入字段,但它不会被触发。我想因为它没有被用户更改,它正在被JavaScript / jqueryUI更新。

我的问题是如何将更改事件附加到通过JavaScript而不是用户更新的字段?

我的插件代码:

;(function ($, window) {

    var validateStuff = function(element){

        $(element).on('change', function(event){ 
            console.log( "Handler for .on() called." );
        });

    };


    $.fn.validate = function(options){

        return this.each(function(){

            var elem = $( this );

            validateStuff(elem);

        });
    };

})(jQuery);

更新

datepicker代码

$('.day-picker').datepicker({
    inline: true,
    showOtherMonths: true,
    dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
    onSelect: function (dateText, inst) {
        var startDate = new Date(dateText);
        var selDay = startDate.getDate();
        var selMonth = startDate.getMonth() + 1;
        var selYear = startDate.getFullYear();

        var fieldElement = $(this).siblings(".date-field");

        var selDay = selDay < 10 ? "0" + selDay : selDay;
        var selMonth = selMonth < 10 ? "0" + selMonth : selMonth;

        $(fieldElement).val(selDay + "-" + selMonth + "-" + selYear);
    }
});

1 个答案:

答案 0 :(得分:0)

更改input元素的值时,可以触发change事件:

$(fieldElement).val(selDay + "-" + selMonth + "-" + selYear).change();

也可以写成

$(fieldElement).val(selDay + "-" + selMonth + "-" + selYear).trigger('change');

注意:如果没有传递参数,像change()这样的事件处理程序方法只会触发事件。