【问题标题】:Event listener when another event changes my input value当另一个事件更改我的输入值时的事件监听器
【发布时间】:2018-12-05 08:47:20
【问题描述】:

我有一个带有 datepicker 类的输入,如下所示:

<input class="ui-calendar hasDatepicker" type="text" name="date" id="date">

当这个输入值改变时,我需要覆盖所有场景。所以我有一个 .datepicker onSelect(当我通过 datepicker 日历选择日期时使用)和简单的 onChange(当我通过键盘输入日期时使用)事件:

$('#date').datepicker({
  onSelect: function() {
    console.log('datepicker onSelect event');
  }
});

$('#date').on('change', function() {
  console.log('onChange event');
});

现在的问题是我有单独的按钮:

<a href="#" onclick="setDate('date', '2018-12-05', '2018-12-05'); return false;">Set date</a>

这个 setDate 函数改变了我的 datepicker 输入的值。

如何在不将任何代码放入 setDate 函数本身的情况下捕获此 setDate 事件?我尝试在我的 datepicker 输入上添加监听器,但它只捕获我通过键盘输入的值。

【问题讨论】:

  • 只听input事件$('#date').on('input', function() { console.log('onChange event'); });
  • “现在的问题是我有单独的按钮” - 你只需要在这个特定的地方吗?然后我只需在此处修改该按钮的onclick 处理程序……调用 setDate,在 $('#date') 上触发更改事件,返回 false。

标签: javascript jquery events listener jquery-events


【解决方案1】:

首先,不要使用on* 事件属性,不显眼地附加您的事件处理程序。

其次,您应该通过datepicker()库使@​​987654322@更改日期,然后您将免费获得此行为:

<a href="#" class="set-date" date-foo="date" date-date1="2018-12-05" data-date2="2018-12-05">Set date</a>
$('.set-date').click(function(e) {
  e.preventDefault();
  $("#date").datepicker("setDate", $(this).data('date1'));
});

或者,您可以在输入上设置val() 并手动设置trigger() change 事件。

$('.set-date').click(function(e) {
  e.preventDefault();
  $('#date').val($(this).data('date1')).trigger('change');
});

【讨论】:

  • 是的,.trigger 可能是一条出路,但有没有办法不编辑 setDate 函数本身?它在整个项目上运行,我只需要在单独页面中的一个案例上使用这个触发器。
  • 是的,我展示的方法可以在您不修改 onclick 参考的情况下工作,如果您这样做,那就更好了。
  • 问题是我什至不能编辑 href 按钮类本身......所以我不能把 set-date 类放在上面。通过在这样的标签上添加 onClick 事件解决了这个问题: $('.form-field .ui-calendar').parent().on('click', 'a', function() 谢谢你的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多