在addEventListener中传递参数

时间:2010-11-11 18:02:55

标签: javascript firefox firefox-addon addeventlistener dom-events

我正在开发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”访问?

1 个答案:

答案 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);