如果通过Javascript更改了输入,则jQuery会触发事件
jQuery fire event if input is changed through Javascript
如果输入文本通过使用.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);
}
};
相关文章:
- 在创建对象后附加一个jquery事件
- 将jQuery事件应用于所有类元素
- Jquery事件处理程序仅适用于匿名函数
- 如何在jQuery事件处理程序中存储和重用超时
- 无线电输入更改的jQuery事件未启动
- 我应该/如何清除mousemove JQuery事件侦听器
- 是否可以在jQuery事件中更改Angular范围
- jQuery事件侦听器多次启动
- jQuery 事件处理程序堆叠
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器
- 一个接一个地触发jQuery事件
- 在JQuery事件中查找父元素
- 堆叠jQuery事件(动画)
- 在jquery事件中引用javascript对象
- 动态添加对象的jQuery事件处理程序
- jQuery事件命名空间是否可以包含破折号
- Jquery事件绑定获胜'当作为方法调用时不起作用,但当直接在控制台中调用时会起作用
- 没有为Ajax添加的新元素注册Jquery事件
- 动态创建的DOM元素上的jQuery事件绑定
- jQuery事件未在动态生成的内容上激发