防止jQuery变异被执行两次

时间:2018-06-15 09:10:28

标签: javascript jquery mutation-observers

在点击按钮后触发变异时,我必须在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的不同方法intead,但是哪一个?

提前致谢

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:当我点击按钮时,一个节点被移除并突然重新创建。这就是我得到两个突变的原因。

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

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