【发布时间】:2013-08-17 02:12:39
【问题描述】:
我有一个使用数据格式HH:mm:ss PP 格式化的输入字段。单击时间选择器时,输入字段上的focus 不会出现,这就是我无法使用onblur 事件的原因。我想要的是keydown 或keyup 事件,但在我的情况下似乎不起作用,因为focus 不在输入字段中,所以我应该使用什么jQuery 事件?
【问题讨论】:
我有一个使用数据格式HH:mm:ss PP 格式化的输入字段。单击时间选择器时,输入字段上的focus 不会出现,这就是我无法使用onblur 事件的原因。我想要的是keydown 或keyup 事件,但在我的情况下似乎不起作用,因为focus 不在输入字段中,所以我应该使用什么jQuery 事件?
【问题讨论】:
change 似乎工作正常:
$("#datepicker").datepicker()
.on("change", function () {
console.log("Changed");
});
示例是 datepicker(),我不确定您的 timepicker 实现是什么,因为它不在 jquery(ui) api 中。但它也应该可以工作。
编辑:根据datetimepicker() 看到的DOM,查看您正在使用的日期时间选择器后,我认为这应该适合您:
$('#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)
}
},
使用我上面添加的两行代码,您应该能够依赖绑定到 input 元素的 change 事件。
【讨论】:
datepicker()。您必须选择元素。
$('#datetimepicker2') 并且我尝试了 alert() 一些东西,但它不起作用。它仅适用于$('#datetimepicker2').datetimepicker
.well 中,然后当应用 datetimepicker() 时,它会将日历选择器附加到 dom好之后。我会更新答案。