Javascript.RU

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

[jQuery] [Обработка клика] Как не потерять текущий контекст внутри обработчика?
Здравствуйте!


Есть у меня объект, называемый "Панель управления". На нем, для упрощения, одна кнопка. Нужно при клике на эту кнопку, выполнять некие действия и вызывать функции в контексте объекта "Панель управления".

Проблема в том, что обработчик клика, являясь встроенной функцией, имеет собственный контекст исполнения. И я не могу понять, как из обработчика достучаться до функций объекта "Панель управления".

Пример кода (в комментариях слово "класс" используется только для удобства понимания):

Код:
// Панель управления
function ControlPanel() 
{
 // jQuery - элемент, к которому привязывается данный класс
 var control_panel_div;

 this.init = function(ipanel_div) 
 {
  // Запоминается элемент, к которому прикреплен экземляр класса
  control_panel_div=ipanel_div;

  // Создание области с кнопкой PLAY
  var key_play_tag='<div id="lb_key_play"><img src="pic/key_play.png"/></div>';
  
  // Кнопка добавляется
  control_panel_div.append(key_play_tag);


  // Обработчик кнопки PLAY
  $("#lb_key_play").click( 
   function() 
    {
     $("#lb_key_play").fadeOut(20);
     $("#lb_key_play").fadeIn(20);

     // Тут какие-то действия
     // Проблема в том, что контекст текущего класса теряется
     // И невозможно вызвать методы текущего класса, например, this.update()
    } 
  );
 } 

 this.update = function() 
 {
  ...
 } 
}

Вопрос по приведенному коду: как из обработчика кнопки PLAY вызвать this.update() ?
Ответить с цитированием
  #2 (permalink)  
Старый 10.02.2011, 16:34
Аспирант
Отправить личное сообщение для xintrea Посмотреть профиль Найти все сообщения от xintrea
 
Регистрация: 02.01.2011
Сообщений: 56

Все, решение найдено.

В вышеприведенном примере можно отказаться от встраиваемой функции, а сделать функцию-обработчик, например this.on_click_play().

Привязать ее можно так:

Код:
$("#lb_key_play").bind('click', {obj: this}, function(event){ event.data.obj.on_click_play()});
Из нее обычным образом вызываются и другие функции класса, например this.udate();.
Ответить с цитированием
Ответ



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

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