【问题标题】:Passing parameters in addEventListener在 addEventListener 中传递参数
【发布时间】:2010-11-11 18:02:54
【问题描述】:

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

如何使这项工作能够将 checkTitle 参数“事件”访问到 onTitleChange?

【问题讨论】:

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


    【解决方案1】:

    当浏览器调用事件处理程序时,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 ); };
    猜你喜欢
    • 2012-09-04
    • 2012-08-15
    • 1970-01-01
    • 2017-12-12
    • 2014-05-25
    • 2014-06-26
    • 2011-06-04
    • 2022-01-21
    • 2010-09-20
    相关资源
    最近更新 更多