Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2010, 12:52
Интересующийся
Отправить личное сообщение для pauluss Посмотреть профиль Найти все сообщения от pauluss
 
Регистрация: 23.03.2010
Сообщений: 22

Обработка события элемента внутри создавшего его объекта
Здравствуйте, такая грабля:
Есть класс, у него есть методы. Один из методов генерит некие элементы DOM. Как сделать так, что-бы обработчик события созданного элемента DOM происходила внутри объекта?
То есть:
function MyClass()
{
    this.Method = function(){ alert('Обработчик события');}

    this.Render = function()
    {
        // JQuery создаем элемент DOM и цепляем на него onclick
        $("<TD>").appendTo(parentElement).click(???????);
    }
}

Что поставить вместо вопросиков, чтоб при клике вызывался this.Method()?

Хочется сделать красиво, чтоб объект был самодостаточным и вся работа проходила внутри него.
Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 06.09.2010, 13:18
Кандидат Javascript-наук
Отправить личное сообщение для jetli13 Посмотреть профиль Найти все сообщения от jetli13
 
Регистрация: 25.11.2009
Сообщений: 109

$("<TD>").appendTo(parentElement).click('MyClass.M ethod');
Ответить с цитированием
  #3 (permalink)  
Старый 06.09.2010, 21:42
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

$("<TD>").appendTo(parentElement).click(this.Method);

А вообще методы лучше в прототип выносить.
Ответить с цитированием
  #4 (permalink)  
Старый 07.09.2010, 10:03
Кандидат Javascript-наук
Отправить личное сообщение для jetli13 Посмотреть профиль Найти все сообщения от jetli13
 
Регистрация: 25.11.2009
Сообщений: 109

Цитата:
А вообще методы лучше в прототип выносить.
почему лучше?
Ответить с цитированием
  #5 (permalink)  
Старый 07.09.2010, 13:19
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Потому, что при каждом создании объекта через конструктор, создаются одинаковые методы для каждого созданного экземпляра:
function MyClass(){
  this.method = function(){}; // Ещё один новый метод
}

Если методы определять в прототипе, все созданные объекты будут использовать одну и ту же функцию:
function MyClass(){}
MyClass.prototype.method = function(){}; // Один на всех

Это сильно снижает расход памяти.

Последний раз редактировалось B~Vladi, 07.09.2010 в 13:22.
Ответить с цитированием
  #6 (permalink)  
Старый 07.09.2010, 14:17
Кандидат Javascript-наук
Отправить личное сообщение для jetli13 Посмотреть профиль Найти все сообщения от jetli13
 
Регистрация: 25.11.2009
Сообщений: 109

B~Vladi,
Почему то не могу поставить плюс )
Спасибо за ответ
Ответить с цитированием
  #7 (permalink)  
Старый 07.09.2010, 14:22
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Сообщение от jetli13
Почему то не могу поставить плюс )
Да, бывает)
Ответить с цитированием
  #8 (permalink)  
Старый 07.09.2010, 15:02
Интересующийся
Отправить личное сообщение для pauluss Посмотреть профиль Найти все сообщения от pauluss
 
Регистрация: 23.03.2010
Сообщений: 22

Спасибо большое, но не работает
$("<TD>").appendTo(parentElement).click(this.Method);

Подозреваю, что потому, что this ссылается уже не на екземпляр моего класса, а на страницу. То есть не находит method.
Но может я что-то накосячил, сейчас ещё раз все проверю.

И ещё один вопрос. А как быть, если обработчик события должен принимать параметр?
this.Method = function(id){ alert('Обработчик события с параметром '_id);}

Спасибо.
Ответить с цитированием
  #9 (permalink)  
Старый 07.09.2010, 15:08
Интересующийся
Отправить личное сообщение для pauluss Посмотреть профиль Найти все сообщения от pauluss
 
Регистрация: 23.03.2010
Сообщений: 22

Прошу пардона, работает.
Но все таки как быть с параметрами?
Ответить с цитированием
  #10 (permalink)  
Старый 07.09.2010, 16:35
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

this.Method = function(evt){
  alert('Обработчик события с параметром ' + evt.data);
}

$("<TD>").appendTo(parentElement).bind('click', this.Method, 'бла-бла-бла');

jQuery рулит, да?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение первого элемента объекта Kein Events/DOM/Window 6 02.06.2010 19:01
Массивы удаление элемента и вставка на его место другого mycoding Общие вопросы Javascript 1 19.04.2010 21:30
эмуляция события click для элемента select Polo Events/DOM/Window 4 16.12.2009 12:29
Обработка события Deep Events/DOM/Window 12 29.07.2009 21:58
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 18:00