Javascript 如何监控身体';数据';jQuery中的属性更改?
我的body标记中有数据段属性,该属性由滑块更改。我需要根据这个值触发一个函数,当它被更改时Javascript 如何监控身体';数据';jQuery中的属性更改?,javascript,jquery,jquery-events,Javascript,Jquery,Jquery Events,我的body标记中有数据段属性,该属性由滑块更改。我需要根据这个值触发一个函数,当它被更改时 不过,我不确定在这种情况下如何附加事件侦听器?`当DOM节点属性发生更改时,没有可靠的跨浏览器方式来接收事件。有些浏览器支持“DOM突变事件”,但你不应该依赖它们,你可以用谷歌搜索这个短语来了解这项技术的不幸历史 如果滑块控件不触发自定义事件(我认为大多数现代控件都会触发),那么最好设置setInterval()方法来轮询该值 因为在我的用例中,我所有的.data('type','value')都是在j
不过,我不确定在这种情况下如何附加事件侦听器?`当DOM节点属性发生更改时,没有可靠的跨浏览器方式来接收事件。有些浏览器支持“DOM突变事件”,但你不应该依赖它们,你可以用谷歌搜索这个短语来了解这项技术的不幸历史
如果滑块控件不触发自定义事件(我认为大多数现代控件都会触发),那么最好设置
setInterval()
方法来轮询该值 因为在我的用例中,我所有的.data('type','value')
都是在javascript块中设置的,所以在我的例子中,我只是在.data(…)
后面放一个.change()
链,然后使用普通的$(“#哦,我的数据”).change()
访问更新
这对我来说很好,请看演示
$(“#哦,我的数据”).change(函数(){
$(“#结果”).text($(“#结果”).text()++'+$(this.data('value'));
})
$(“#哦,我的数据”).data('value','something1').change();
$(“哦,我的数据”).data('value','something2').change();
$(“哦,我的数据”).data('value','something3').change()代码>
结果:
您可以使用MutationObserver
,这是一个API,可以避免使用setInterval
进行轮询。如果在元素
中有对元素的引用,可以执行以下操作:
const mutationObserver=新的mutationObserver(回调);
观察(元素,{attributes:true});
函数回调(){
//每次调用属性时都将调用此函数
//已更改,包括“数据-”属性。
}
使用此API可以很容易地检测到元素中的其他更改,您甚至可以通过调用observe
中的配置对象来获取回调中更改的属性的新旧值。有关这方面的所有文档都可以在MDN中阅读:您是否可以使用滑块上激活的事件来检查值?滑块在更改值时是否会触发事件?我更喜欢setTimeout()
在自身上循环,而不是setInterval()
,这仅仅是因为setInterval()的事实
可能会被备份并导致问题,可能是误报。@Jared-我不同意这种情况。检查单个节点属性所需的时间可以忽略不计。“备份”是不太可能的,而setInterval在语义上要好得多。在随后执行setInterval时,将纠正可能的误报。如果我们处理的是远程服务或其他高潜在延迟情况,情况就不同了。