Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何附加以编程方式更改值时触发的JavaScript事件处理程序_Javascript_Jquery_Events_Html Select_Jquery Events - Fatal编程技术网

如何附加以编程方式更改值时触发的JavaScript事件处理程序

如何附加以编程方式更改值时触发的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

我有“标题”下拉列表,当选择“Dr”时,会触发“性别”下拉列表。在page ready上,我将事件处理程序附加到change事件上,但是页面上有某种机制(我不控制),可以通过编程方式更改下拉列表中的值,但不会触发
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);
})();