JQuery 时钟选择器在输入时未触发更改事件

JQuery clockpicker not triggering change event on input

本文关键字:事件 时钟 选择器 输入 JQuery      更新时间:2023-09-26

在我正在处理的代码库中,有这种类型的回调绑定,每当任何输入发生更改时,都必须发生一些事情

$(document.body).on('change', '.input-sm', function (){
 ...
})

问题是,一些输入短信是通过时钟选择器更改的,它不会触发"更改"事件。我将如何做到这一点?理想情况下,我希望时钟选择器触发更改事件。

http://jsfiddle.net/4zg3w5sj/7/

编辑:回调一次与时钟选择器绑定到多个输入,所以我不能使用输入变量来触发更改事件(除非我显式迭代我猜的输入)

您可以使用时钟选择器回调

beforeHourSelect:在用户发出 小时选择

afterHourSelection:用户发出 小时选择

beforeDone:在时间写入之前触发的回调函数 输入

afterDone:时间写入输入后触发的回调函数

input.clockpicker({
    autoclose: true,
    afterDone: function() {
       input.trigger("change");       
    }
});

我已经解决了问题

该插件触发了更改事件,但它们使用 triggerHandler 而不是触发器,这意味着您无法在正文中添加侦听器,您必须直接侦听输入

// Hours and minutes are selected
    ClockPicker.prototype.done = function() {
        raiseCallback(this.options.beforeDone);
        this.hide();
        var last = this.input.prop('value'),
            value = leadingZero(this.hours) + ':' + leadingZero(this.minutes);
        if  (this.options.twelvehour) {
            value = value + this.amOrPm;
        }
        this.input.prop('value', value);
        if (value !== last) {
            this.input.triggerHandler('change');
            if (! this.isInput) {
                this.element.trigger('change');
            }
        }
        if (this.options.autoclose) {
            this.input.trigger('blur');
        }
        raiseCallback(this.options.afterDone);
    };

在这里看到一个修复

 var input = $('#input-a');
    var value = input.val();
    // bind multiple inputs
    $('.myinput').clockpicker({
        autoclose: true,
        afterDone: function() {
        console.log("test");
        }
    });
    // in the actual code it's not tied to an id but to a non-unique class
    // does not trigger if changed by clock-picker
    $(".myinput").on('change', function(){
        console.log("!!!!")
    })