首页 > 解决方案 > 防止 jQuery 突变被执行两次

问题描述

单击按钮后触发突变时,我必须在 jQuery 中执行两个函数:

 function mutate(mutations) {
     mutations.forEach(function(mutation) {
         function1().done(
             function2()
         );
     });
  }

 var target = document.querySelector('#identifier')
 var observer = new MutationObserver( mutate );
 var config = { characterData: false, attributes: false, childList: true, subtree: false };
 observer.observe(target, config);

代码工作正常,但我希望当我点击一个指定的按钮时突变只被触发一次;但由于某种原因,突变发生了两次,然后代码也被执行了两次。我不能修改触发突变的代码,所以我只能修改突变处理(上面的代码)。

有什么办法可以防止每次执行两次?我应该使用一种不同的方法而不是 forEach,但是哪一种呢?

提前致谢

标签: javascriptjquerymutation-observers

解决方案


我建立了一个解决方案:当我单击按钮时,一个节点被删除并突然重新创建。这就是为什么我得到两个突变。

我添加了一个if以确保仅在重新创建节点时才进行调用

function mutate(mutations) {
     mutations.forEach(function(mutation) {
         if(mutation.addedNodes.length > 0 && mutation.removedNodes.length == 0) {
             function1().done(
                 function2()
             );
         }
     });
}

推荐阅读