Javascript 如何监控身体';数据';jQuery中的属性更改?

Javascript 如何监控身体';数据';jQuery中的属性更改?,javascript,jquery,jquery-events,Javascript,Jquery,Jquery Events,我的body标记中有数据段属性,该属性由滑块更改。我需要根据这个值触发一个函数,当它被更改时 不过,我不确定在这种情况下如何附加事件侦听器?`当DOM节点属性发生更改时,没有可靠的跨浏览器方式来接收事件。有些浏览器支持“DOM突变事件”,但你不应该依赖它们,你可以用谷歌搜索这个短语来了解这项技术的不幸历史 如果滑块控件不触发自定义事件(我认为大多数现代控件都会触发),那么最好设置setInterval()方法来轮询该值 因为在我的用例中,我所有的.data('type','value')都是在j

我的body标记中有数据段属性,该属性由滑块更改。我需要根据这个值触发一个函数,当它被更改时


不过,我不确定在这种情况下如何附加事件侦听器?

`当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时,将纠正可能的误报。如果我们处理的是远程服务或其他高潜在延迟情况,情况就不同了。