2015-11-11 5 views
-1

ToString дает ошибку cannot read property 'toString()' of undefined при ее использовании в качествеToString() дает ошибку при использовании передать параметр

document.getElementById('pMonth').addEventListener('click',function(){ calen(this.year.toString()+'-'+(this.currentMonth1-1).toString());},false); 

но код прекрасно работает при использовании в качестве

var tr=this.year.toString()+'-'+(this.currentMonth1-1).toString(); 
document.getElementById('pMonth').addEventListener('click',function(){ calen(tr);},false); 

this.year и this.CurrentMonth1 числовые стоимость !! , пожалуйста, скажите мне, где я иду не так!

+0

попробуйте удалить 'this.' для переменных внутри слушатель .... –

+0

Я согласен с redflare –

+1

Я попытался удалить 'this', и он отлично работает, вы можете объяснить, как он работает без этого ключевого слова, поскольку значение 'year' и 'currentMonth1' недоступно без ' это 'в других частях кода @ redflar3 –

ответ

0

вам необходимо связать контекст обработчика событий, поскольку this будет ссылки на элемент DOM вернулся из document.getElementById('pMonth')

Так что вам нужно:

document.getElementById('pMonth').addEventListener(
    'click', 
    function(){ 
     calen(this.year.toString()+'-'+(this.currentMonth1-1).toString()); 
    }.bind(this), 
    false 
); 
+0

Я вообще этого не понимаю. Наиболее вероятным значением для 'this' здесь будет' window' –

+0

Объект 'this' основан на контексте того, где вызывается функция. В этом случае он вызывается в обработчике событий click элемента '# pMonth', поэтому контекст будет элементом' # pMonth', вы можете легко сделать тестовый пример, чтобы попробовать. –

+0

Да, этот код работает отлично, но можете ли вы объяснить, что такое значение 'this', как в' bind (this) '. и как значение двух 'this' отличается в этом коде! –

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