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