繁体   English   中英

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

[英]jQuery fire event if input is changed through Javascript

如果输入文本已通过jQuery API( https://api.jquery.com/change/ )中的.val()通过Javascript更改,则需要触发一个事件: 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是否是保存状态信息的最佳场所的问题。 更为复杂但灵活的解决方案是创建一个模型/视图对象以存储状态,并使其管理事件和更新。

但是,在对注释进行进一步检查后,您要解决的实际问题不是如何触发更改事件,而是当另一个第三方库实用地更改了输入时如何判断输入何时发生了更改。

第一步是调查有问题的库,看看它们是否提供您可以附加的更改事件。 如果不是这样(在考虑使用其他性能更好的库之后),您可能会陷入轮询解决方案的困境。

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);
  }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM