在addEventListener中传递参数

4

我正在开发一个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); },我从未收到“test”警报,它会显示一个带有“[object Event]”的警报。也尝试过不使用this在func上,但仍然无法工作。

我该如何使其能够访问checkTitle参数“event”并进入onTitleChange?

1个回答

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

这对我帮助很大,但只有在我将第二行更改为:var func = function(event) { self.onTitleChange ( event ); };之后才有效。 - Israel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接