如果输入文本已使用.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
答案 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);
}
};