【问题标题】:Change event firing when initiating the time picker on inputs在输入上启动时间选择器时更改事件触发
【发布时间】:2019-07-23 16:27:51
【问题描述】:

在我的代码中,我将输入附加到在页面中呈现的 div,如下所示:

$("#output-area").append("<input type='text' class='timepicker' /><input type='text class='timepicker' />

追加后,我像这样启动时间选择器:

$('.timepicker').timepicker({
     timeFormat: 'h:mm p',
     interval: 30,
     minTime: '12:00am',
     maxTime: '11:30pm',
     defaultTime: '9:00am',
     dynamic: false,
     dropdown: true,
     scrollbar: true,
     change: function(){
           console.log("triggered");
     }
});

奇怪的是,当我创建时间选择器时,更改事件会在它们添加到 DOM 的那一刻触发。我认为只有当输入的值 changed vs created 时才会触发 change 事件。

【问题讨论】:

  • 那么这会带来什么问题呢?
  • 它触发了一个更改事件?所以实际上,那里的任何功能都是在创建时触发的(例如:如果正在进行 ajax 调用)。
  • 这不是关于改变的,那是关于创造+改变的,这真的会弄乱一些代码。

标签: jquery timepicker


【解决方案1】:

在不修改插件本身的情况下,您可以在循环中初始化并在每个实例中为 isInit 之类的东西设置一个标志,这样您就不会对初始调用做出反应:

$('.timepicker').each(function() {
  var isInit = true;
  $(this).timepicker({
    timeFormat: 'h:mm p',
     .....
    change: function() {
      if (!isInit) {
        console.log("triggered");
      }
      isInit = false
    }
  });
});

也许你可以使用另一个事件,但是周围有很多时间选择器插件,所以不确定你在使用哪个。

对我来说,这似乎是插件中的一个错误

【讨论】:

  • 是的。我将不得不选择另一个时间选择器。该插件似乎已经 3 年没有更新了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 2017-07-24
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多