簡體   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