4

我正在使用Firefox擴展,並試圖將參數傳遞給addEventListener。我在「聽」在頁面標題的變化,我的代碼看起來是這樣的:在addEventListener中傳遞參數

function Test() 
{ 
    this.checkTitle = function(event) 
    { 
     var func = function() { this.onTitleChange (event); }; 
     var target = content.document.getElementsByTagName('TITLE')[0]; 
     target.addEventListener('DOMSubtreeModified', func, false); 
    } 

    this.onTitleChange = function(e) 
    { 
     // do stuff with e 
     alert('test'); 
    } 

    this.handleEvent = function (event) 
    { 
     switch (event.type) 
     { 
      case "DOMContentLoaded": 
      { 
       this.checkTitle(event); 
      } 
     } 
    } 

    window.addEventListener ("DOMContentLoaded", this, false); 
} 

我從來沒有得到「測試」的警報,如果我用FUNC =函數(){警報(事件); };它確實顯示'[對象事件]'的警報。也嘗試過不使用這個。在功能上,但仍然不會工作。

如何使這項工作能夠將checkTitle參數「event」存入onTitleChange?

回答

3

當瀏覽器調用事件處理程序時,this將引用該元素,而不是您的實例。

您需要保存所需this的副本在一個單獨的變量:

var self = this; 

var func = function(e) { self.onTitleChange (e); }; 
var target = content.document.getElementsByTagName('TITLE')[0]; 
target.addEventListener('DOMSubtreeModified', func, false); 
+0

謝謝,解決它。 – gtilx 2010-11-11 18:20:11

+0

這有很大的幫助,但只有在我將第二行更改爲:var func = function(event){self.onTitleChange(event); }; – Israel 2013-06-24 14:04:12