Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.06.2014, 10:56
Аспирант
Отправить личное сообщение для OlegALL Посмотреть профиль Найти все сообщения от OlegALL
 
Регистрация: 23.01.2010
Сообщений: 90

не видится this.переменная при вызове обработчика
Привет.

Такая проблема.

this.width, инициализированный вызовом конструктора, при непосредственном вызове функции showNextPicture равен 130 - как надо, а если вызвать эту функцию через onclick - то undefuned. Почему?


код:
function Carousel(width, count){
		this.width = width;
		this.count = count;
	}

Carousel.prototype.init = function(){
// код
}


Carousel.prototype.showNextPicture = function(){
console.log(this.width); // 130 - если вызвать прямо, undefined - если по щелчку мыши
}

var carousel = new Carousel(130, 5);	
carousel.init();  
//carousel.showNextPicture();

// Обработчики событий
document.getElementById('next').addEventListener("click", carousel.showNextPicture, false);
document.getElementById('prev').addEventListener("click", carousel.showPreviousPicture, false);
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2014, 11:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

OlegALL,
а если так
document.getElementById('next').addEventListener("click", function(){
carousel.showNextPicture()
} , false);
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2014, 11:21
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Потому что this в обработчике события ссылается на элемент на котором оно висит.
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 18.06.2014, 15:01
Аспирант
Отправить личное сообщение для OlegALL Посмотреть профиль Найти все сообщения от OlegALL
 
Регистрация: 23.01.2010
Сообщений: 90

рони, не помогло, симптом тот же
Ответить с цитированием
  #5 (permalink)  
Старый 18.06.2014, 15:03
Аспирант
Отправить личное сообщение для OlegALL Посмотреть профиль Найти все сообщения от OlegALL
 
Регистрация: 23.01.2010
Сообщений: 90

Сообщение от Aetae Посмотреть сообщение
Потому что this в обработчике события ссылается на элемент на котором оно висит.
Я не понял, можно разъяснить? И как сделать как мне надо?
Ответить с цитированием
  #6 (permalink)  
Старый 18.06.2014, 15:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от OlegALL
рони, не помогло, симптом тот же

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
</head>

<body>   <p id='next'>жмак сюды</p>
   <script>
         function Carousel(width, count){
      this.width = width;
		this.count = count;


	}

Carousel.prototype.init = function(){
// код
}


Carousel.prototype.showNextPicture = function(){
alert(this.width); // 130 - если вызвать прямо, undefined - если по щелчку мыши
}

var carousel = new Carousel(130, 5);
carousel.init();
//carousel.showNextPicture();

// Обработчики событий
document.getElementById('next').addEventListener("click", function(){
carousel.showNextPicture()
} , false);
//document.getElementById('prev').addEventListener("click", carousel.showPreviousPicture, false);

   </script>
</body>

</html>
Ответить с цитированием
  #7 (permalink)  
Старый 18.06.2014, 21:20
Аспирант
Отправить личное сообщение для OlegALL Посмотреть профиль Найти все сообщения от OlegALL
 
Регистрация: 23.01.2010
Сообщений: 90

Сообщение от рони Посмотреть сообщение

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
</head>

<body>   <p id='next'>жмак сюды</p>
   <script>
         function Carousel(width, count){
      this.width = width;
		this.count = count;


	}

Carousel.prototype.init = function(){
// код
}


Carousel.prototype.showNextPicture = function(){
alert(this.width); // 130 - если вызвать прямо, undefined - если по щелчку мыши
}

var carousel = new Carousel(130, 5);
carousel.init();
//carousel.showNextPicture();

// Обработчики событий
document.getElementById('next').addEventListener("click", function(){
carousel.showNextPicture()
} , false);
//document.getElementById('prev').addEventListener("click", carousel.showPreviousPicture, false);

   </script>
</body>

</html>
Спасибо! Ваша строка работала, сорри, что-то не углядел
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При вызове увеличенной фотки изображения нету скролбара Kerm Events/DOM/Window 0 07.04.2011 17:31
getAllResponseHeaders() и status имеют смысл только при readyState==4? mister_maxim AJAX и COMET 7 27.03.2011 19:08
Изменение стиля родительского элемента при :hover дочернего lanzs Элементы интерфейса 2 16.10.2010 13:28
Ошибка при добавлении обработчика к событию Riim Events/DOM/Window 32 19.01.2010 14:17
SetTimeout не принимает параметр при повторном вызове 2dkott Общие вопросы Javascript 15 08.09.2009 16:37