如何附加以编程方式更改值时触发的JavaScript事件处理程序
我有“标题”下拉列表,当选择“Dr”时,会触发“性别”下拉列表。在page ready上,我将事件处理程序附加到change事件上,但是页面上有某种机制(我不控制),可以通过编程方式更改下拉列表中的值,但不会触发如何附加以编程方式更改值时触发的JavaScript事件处理程序,javascript,jquery,events,html-select,jquery-events,Javascript,Jquery,Events,Html Select,Jquery Events,我有“标题”下拉列表,当选择“Dr”时,会触发“性别”下拉列表。在page ready上,我将事件处理程序附加到change事件上,但是页面上有某种机制(我不控制),可以通过编程方式更改下拉列表中的值,但不会触发change()事件 设置值后的.change()不是选项 如何附加一个JavaScript事件处理程序,该处理程序在值以编程方式更改时触发,而不是仅在通过select的UI更改时触发?如果您不控制代码更改select框中的选定值,则无法获得事件通知。剩下的选项是通过setInterva
change()
事件
设置值后的.change()
不是选项
如何附加一个JavaScript事件处理程序,该处理程序在值以编程方式更改时触发,而不是仅在通过
select
的UI更改时触发?如果您不控制代码更改select
框中的选定值,则无法获得事件通知。剩下的选项是通过setInterval
或一连串setTimeout
进行轮询
我检查了,甚至一个MutationObserver
也没有帮助-这并不奇怪,因为更改所选项目并没有改变DOM,但我还是希望如此
大约每50毫秒轮询一次,不会对性能产生任何重大影响
下面是一个轮询示例,请根据需要修改间隔:
(函数(){
var s=$(“#s”),
lastValue=s.val();
setInterval(函数(){
var值=s.val();
如果(值!==lastValue){
lastValue=值;
log(“值更改为:”+value);
}
}, 50);
})();
log(“在一秒钟内更改值…”);
setTimeout(函数(){
log(“立即更改值”);
$(#s)val(“2”);
log(“完成更改值”);
}, 1000);代码>
一个
两个
三
这是@T.JCrowder对答案的修改,适用于需要在第一个下拉选项更改时触发.change()
然后自动关闭的版本的用户
(function () {
var selector = "[id='Title']";
var lastValue = $(selector).val();
var timer = setInterval(function () {
var value = $(selector).val();
if (value !== lastValue) {
lastValue = value;
$(selector).change();
clearInterval(timer);
}
}, 500);
})();