4

Я работаю над расширением Firefox, и я пытаюсь передать параметр addEventListener. Я «прослушивание» изменения в заголовке страницы, мой код выглядит примерно так:Передача параметров в 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 = функция() {тревога (событие); }; он показывает предупреждение с «[object Event]». Также попробовал, не используя это. на func, но по-прежнему не работает.

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

ответ

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

Спасибо, что решили. – gtilx

+0

Это очень помогло, но только после того, как я изменил вторую строку: var func = function (event) {self.onTitleChange (event); }; – Israel

 Смежные вопросы

  • Нет связанных вопросов^_^