我正在开发Firefox扩展,我正在尝试将参数传递给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 = function(){alert(event);我永远不会得到'测试'警报。 };它确实显示“[对象事件]”的警报。也尝试不使用它。在func但仍然无法工作。
如何使这项工作能够将onTitleChange中的checkTitle参数“event”访问?
答案 0 :(得分: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);