如果通过Javascript更改了输入,则jQuery会触发事件

jQuery fire event if input is changed through Javascript

本文关键字:jQuery 事件 输入 Javascript 如果      更新时间:2023-09-26

如果输入文本通过使用.val()的Javascript从jQuery API更改,则需要触发事件(https://api.jquery.com/change/):Note: Changing the value of an input element using JavaScript, using .val() for example, won't fire the event.

已经尝试过了如何手动触发onchange事件?但似乎不起作用。。。

这是我的代码:

<input type="text" id="datePrint" maxlength="10" size="6" disabled>
<img src="scripts/calendar/calendar.png" id="datePick" border="0" align="absmiddle" alt="Pick Date" width="40px" height="40px">

JS:需要激活日历事件

Calendar.setup({inputField:'datePrint',ifFormat:'%d/%m/%Y',button:'datePick',align:'T1',singleClick:true}); 

这是日历JS:

http://www.mediafire.com/view/yfrls2nx4m6ls52/calendarJs.txt

在更改输入值时,始终可以触发change事件。

$("input#id").trigger('change');

有两种方法。简单的答案是记住,每次使用.val()也可以调用.change()

然而,这就引出了一个问题,即DOM是否是保存状态信息的最佳位置。一个更复杂但更灵活的解决方案是创建一个模型/视图对象来存储状态,并让它管理事件和更新。

然而,在对评论进行进一步检查后,您试图解决的实际问题不是如何触发更改事件,而是如何在另一个第三方lib实际更改输入时判断输入何时发生了更改。

第一步是调查有问题的库,看看它们是否提供了您可以附加的更改事件。如果没有(在考虑了另一个性能更好的库之后),您可能会遇到轮询解决方案。

function InputChangePoller(selector) {
  this.el = $(selector);
  this._lastKnownValue = this.el.val();
}
InputChangePoller.prototype.start = function() {
  this._timmer = setImmediate($.proxy(this, 'checkValue'), 10);
  return this;
};
InputChangePoller.prototype.stop = function() {
  clearImmediate(this._timmer);
  return this;
};
InputChangePoller.prototype.checkValue = function() {
  var value = this.el.val();
  if (value !== this._lastKnownValue) {
    this._lastKnownValue = value;
    this.el.trigger('change', value);
  }
};