如果通过Javascript更改输入,则jQuery fire事件

时间:2015-03-26 12:00:23

标签: javascript jquery onchange

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

尝试了这个How can I trigger an onchange event manually?,但似乎没有效果......

这是我的代码:

<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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

有两种方法。简单的答案是记住每次使用.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);
  }
};