2014-06-14 23 views
0

所以我想改變我的一些JavaScript的的JavaScript捕獲的事件偵聽器和MutationObserver

從這個

content.forumobserver = content.build.forumobserver = function() { 
    var target = document.querySelector('#content-padding'); 
    var observer = new MutationObserver(function (mutations) { 
     mutations.forEach(function(mutation, idx, mutated) { 
      if(mutation.addedNodes.length === 21) { 
       for(var i = 0; i < mutation.addedNodes.length; i++) { 
        if(mutation.addedNodes[i].id === 'post_container') { 
         // update 
         content.c_page = document.querySelector('.page_current'); 
         content.t_url = content.c_page.href; 
         content.t_page = content.t_url.replace(content.regex.url, '$3'); 
         // reload 
         content.init(options); 
         // page is loaded 
         observer.disconnect(); 
        }; 
       }; 
      }; 
     }); 
    }); 
    $.each(document.querySelectorAll('.yui3-pjax'), function(idx, pjax) { 
     pjax.addEventListener('click', function() { 
      observer.observe(target, { 
       childList: true 
      }); 
     }); 
    }); 
}; 

對此

content.forumobserver = content.build.forumobserver = function() { 
    var target = document.querySelector('#content-padding'); 
    var observer = new MutationObserver(function (mutations) { 
     mutations.forEach(function(mutation, idx, mutated) { 
      if(mutation.addedNodes.length === 21) { 
       for(var i = 0; i < mutation.addedNodes.length; i++) { 
        if(mutation.addedNodes[i].id === 'post_container') { 
         // update 
         content.c_page = document.querySelector('.page_current'); 
         content.t_url = content.c_page.href; 
         content.t_page = content.t_url.replace(content.regex.url, '$3'); 
         // reload 
         content.init(prefs); 
         // page is loaded 
         observer.disconnect(); 
        }; 
       }; 
      }; 
     }); 
    }); 
    document.body.addEventListener('click', function(evt) { 
     if(evt.target.classList.contains('yui3-pjax')) { 
      observer.observe(target, { 
       childList: true 
      }); 
     }; 
    }, true); 
}; 

唯一的問題是,後者這兩個觀察者在達到我想要的位置時不會斷開連接。我在content.init()函數中調用content.forumobserver()。我知道這是不是說斷開添加多個事件偵聽器的身體,而不是原因,是因爲如果我添加一個if語句來檢查的初始值,然後調用content.forumobserver(),並設置中的內容初始化爲true。 init()函數的MutationObserver仍然重新將所有的內容,但隨後其他頁面加載加入被加倍,1,2,4,8,等等上的內容。

那麼,怎樣才能讓我的MutationObserver斷開捕獲的事件,而不必顯式綁定點擊事件到YUI3-pjax錨的內容加載後?

回答

1

使用解決了這個問題,

content.forumobserver = content.build.forumobserver = function(evt) { 
    if(evt.target.classList.contains('yui3-pjax') || evt.target.parentNode.classList.contains('yui3-pjax')) { 
     var target = document.querySelector('#content-padding'); 
     var observer = new MutationObserver(function (mutations) { 
      mutations.forEach(function(mutation, idx, mutated) { 
       if(mutation.addedNodes.length === 21) { 
        for(var i = 0; i < mutation.addedNodes.length; i++) { 
         if(mutation.addedNodes[i].id === 'post_container') { 
          // update 
          content.c_page = document.querySelector('.page_current'); 
          content.t_url = content.c_page.href; 
          content.t_page = content.t_url.replace(content.regex.url, '$3'); 
          // reload 
          content.init(options); 
          // page is loaded 
          observer.disconnect(); 
         }; 
        }; 
       }; 
      }); 
     }); 
     observer.observe(target, { 
      childList: true 
     }); 
    }; 
}; 

document.body.addEventListener('click', content.forumobserver, true);