0

我有一个使用 data-format 格式化的输入字段HH:mm:ss PP。单击focus时间选择器时,输入字段上不会出现,这就是我无法使用onblur事件的原因。我想要的是喜欢keydownkeyup事件,但它似乎在我的情况下不起作用,因为focus在输入字段中,所以我应该使用什么 jQuery 事件?

4

1 回答 1

0

change似乎工作正常:

小提琴

  $("#datepicker").datepicker()
  .on("change", function () {
      console.log("Changed");
  });

示例是datepicker(),我不确定您的timepicker实现是什么,因为它不在 jquery(ui) api 中。但它也应该有效。


编辑:在查看您正在使用的 datetimepicker 之后,基于我看到的 DOM datetimepicker()- 我认为这应该适合您:

小提琴

$('#datetimepicker1').closest(".well").next(".bootstrap-datetimepicker-widget").on("click", "*", function () {
    console.log("Changed");
});

只要确保这是在您的datetimepicker()电话之后。请注意,这将在您的日历/时间选择器中的任何点击时触发,即使它是点击已选择的内容(无更改)。

如果需要,您可以存储输入的最后一个值,然后在继续使用此事件回调函数之前检查它是否已更改。如果它确实发生了变化,请务必更新您持有的“最后一个值”的变量......类似这样的东西。


如果可能,最好的选择实际上是修改datetimepicker()js 以调用函数或从更新文本输入的同一位置触发事件。看代码:

    set: function () {
        var formatted = "";
        if (!this._unset) formatted = this.formatDate(this._date);
        if (!this.isInput) {
            if (this.component) {
                var input = this.$element.find("input");
                input.val(formatted);
                input.trigger("change"); // added this
                this._resetMaskPos(input)
            }
            this.$element.data("date", formatted)
        } else {
            this.$element.val(formatted);
            this.$element.trigger("change"); //added this
            this._resetMaskPos(this.$element)
        }
    },

使用我在上面添加的两行代码,您应该能够依赖change绑定到input元素的事件。

于 2013-08-16T16:21:13.643 回答