Передача параметров в addEventListener - PullRequest
4 голосов
/ 11 ноября 2010

Я работаю над расширением 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, но все еще не будет работать.

Как я могу заставить эту работу получить доступ к параметру checkTitle "event" в onTitleChange?

1 Ответ

3 голосов
/ 11 ноября 2010

Когда браузер вызывает обработчик событий, this будет ссылаться на элемент, а не на ваш экземпляр.

Вам необходимо сохранить копию нужного this в отдельной переменной:

var self = this;

var func = function(e) { self.onTitleChange (e); };
var target = content.document.getElementsByTagName('TITLE')[0];
target.addEventListener('DOMSubtreeModified', func, false);
...