6

我有一个要编辑日期的输入。当输入的值发生变化时,我想执行一个回调。

如果我调用函数 datepicker (来自 bootstrap-datepicker https://github.com/eternicode/bootstrap-datepicker)我不能再挂钩到更改事件。(很奇怪,其他事件似乎还可以)

这是我到目前为止所尝试的:

(使用主干)

events: {
  'changeDate :input' : 'onUpdateField'
},

或者直接使用jquery

$('#Fundacion').on('change', this.onUpdateField);

如果我只是评论以下行

$('#Fundacion').datepicker({
  autoclose : true,
[...]

事件被调用。

另一方面,changeDate 事件被调用,但仅当使用鼠标或箭头更改日期时。我想在用户输入不同的日期时捕捉到事件。

我尝试查看源代码(https://github.com/eternicode/bootstrap-datepicker/blob/master/js/bootstrap-datepicker.js),但我找不到它可能在哪里“吞下”变化事件。

4

3 回答 3

7

这不是推荐的方法,而是一种肮脏的解决方法。只需在 500 毫秒后(或根据您的要求)继续检查日期字段。

var current = $('.transaction-date').val();
function keep_checking() {

    if (current != $('.transaction-date').val()) {
        alert('change happened');
        current = $('.transaction-date').val();
    }
    setTimeout(keep_checking, 500);
}
keep_checking();

更新

如果您使用以下库,那么它会在日期更改时触发事件“changeDate”。外观与 eternicode datepicker 非常相似

http://www.eyecon.ro/bootstrap-datepicker/

示例用法:

jQuery('#dp1').datepicker().on('changeDate', function(ev){
     alert('date is changed');
});
于 2013-09-11T10:21:16.063 回答
2

就我而言,只需执行两个简单的步骤:

  1. 将更改事件侦听器添加到输入(当用户键入不同的日期时它将捕获事件)

    $('#dateInput').on(change, doSomethingOnChange);
    
  2. 添加 datepicker changeDate 事件(当使用鼠标或箭头更改日期时,它将从第一步触发更改事件)

    input.datepicker().on('changeDate', function(){
        $(this).trigger('change');
    });
    
于 2016-01-04T12:29:14.793 回答
0

不确定它是否回答了问题,但问题似乎是已知的

显然,当离开输入焦点时,他们还无法找到判断值是否已更改的方法。

查看:

https://github.com/eternicode/bootstrap-datepicker/pull/295 https://github.com/eternicode/bootstrap-datepicker/issues/241

于 2013-03-03T07:57:44.647 回答