对于带有timepicker的输入字段,什么是正确的jQuery事件

时间:2013-08-16 16:18:05

标签: ajax jquery events

我有一个使用数据格式HH:mm:ss PP格式化的输入字段。单击时间戳时,输入字段上的focus似乎不会显示为什么我无法使用onblur事件。我想要的是keydownkeyup事件,但似乎在我的情况下不起作用,因为focus在输入字段中出来所以我应该使用什么jQuery事件?

1 个答案:

答案 0 :(得分:0)

change似乎工作正常:

Fiddle

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

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


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

Fiddle

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

请确保这是在datetimepicker()电话之后。请注意,即使点击已经选择的内容(无更改),也会在日历/时间选择器中的任何点击时触发此操作。

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


如果可能,最好的选择实际上是修改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事件。