我使用下面的代码来监视给定SELECT元素的更改。
someSelectElement.change(function () { alert('change made'); });
当我通过UI更改选定项的值时,它工作得很好。
但是,如果通过脚本更改值,它似乎不会触发事件。例如,在调试控制台中执行的以下代码更改了选定项,但不会触发事件。
$('#someSelectElement').val('NewValue')
我知道需要检测其他代码对控件所做的更改似乎很不寻常,如果是我的代码,我会手动触发事件,然后收工。问题是,我正在编写一个jQuery插件,当被监视控件的值发生更改时,无论是通过用户干预还是通过插件用户正在运行的客户端脚本,该插件都需要做一些事情。
我假设在这种情况下不触发事件的行为是设计好的。如果不是,请说出来,让我知道我做错了什么。如果是这样,有没有一个解决办法,让我可以监视对SELECT元素的值所做的更改,而不管这些更改是由用户还是代码启动的?
2条答案
按热度按时间mwkjh3gx1#
代码驱动的元素值更改不会触发原生事件,您可以自己触发它们,当然,可以通过jQuery“.trigger()”方法。
Mozilla浏览器长期以来一直有一个“观察”功能,但其他平台不支持。
nkhmeac62#
好的-所以我 * 可能 * 有一个比间隔计时器解决方案更好的解决方案。
还要注意,这是一个大得多的黑客攻击,下面只是简单的概念证明,绝不是生产准备:
See the sample here.
本质上,我在做的是:
1.将函数转换为字符串
1.替换边界函数构造
1.添加我想注入的任何功能
1.将修改后的函数重新分配给原始函数
看起来可以,但在真实的世界中可能不行:)