Javascript 使用Jquery监视属性更改

Javascript 使用Jquery监视属性更改,javascript,jquery,Javascript,Jquery,我需要在div的属性更改时触发一个事件。我遇到了这个插件,它似乎做到了这一点。唯一的问题是它多次触发事件。例如,如果我这样做: $("#sgPluginBox").attrchange({ callback: function(evnt) { if(evnt.attributeName == "style") { alert('test'); } } }); 它将显示八个警报框。我不知道它为什么这么做。我需要它在样式属

我需要在div的属性更改时触发一个事件。我遇到了这个插件,它似乎做到了这一点。唯一的问题是它多次触发事件。例如,如果我这样做:

$("#sgPluginBox").attrchange({

    callback: function(evnt) {
        if(evnt.attributeName == "style") { 
            alert('test');
        }
    }
});
它将显示八个警报框。我不知道它为什么这么做。我需要它在样式属性更改时只显示一个警报框。有什么建议吗

编辑:


这不是最优雅的解决方案,但它看起来像是使用了$.one(警报('test'))完成的。

尝试使用
MutationObserver

$(文档).ready(函数(){
var目标=$(“#测试”).get(0);
//创建一个观察者实例
var观察者=新的突变观察者(功能(突变){
if(突变长度){
警报(突变[0]。属性名称+“已更改”)
target.innerHTML=target.style.fontSize;
//断开`观察员`
这个。断开连接()
}
});
//观察员的配置:
变量配置={
属性:true
};
//传入目标节点以及观察者选项
observer.observe(目标,配置);
$(“#test”).attr(“样式”,“字体大小:36px”);
setTimeout(函数(){
$(“#测试”).attr(“样式”,“字体大小:52px”)
.html($(“#测试”).css(“fontSize”))
},
1000)
})


abc
是您的
$(“#测试”).attrchange()代码我是一个循环还是会导致它的多个实例?这对我来说很好。正如之前的评论所说,似乎正在发生其他事情。是否多次附加事件?注意插件文档中关于观看样式的免责声明。复制您的问题的演示将有助于更改属性();不在一个循环或任何东西中。我正在观看的div是一个模式库的一部分,当点击页面上的一个图像时,它就会出现。但是样式属性没有多次更改。可能有8个样式更改。。。添加您从问题中删除的行-
trackValues:true
,并检查属性
evnt.oldValue
evnt.newValue
插件已经使用了
MutationObserver
-
jQuery(#sgPluginBox”).data(“attrchange obs”)instanceof MutationObserver//==true
@Andreas“该插件已使用
MutationObserver
”未尝试该插件;尽管该插件似乎不是实现预期结果所必需的。如果存在任何突变记录,可以调用
.disconnect()
停止观察元素属性更改