Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обработка события элемента внутри создавшего его объекта (https://javascript.ru/forum/misc/11663-obrabotka-sobytiya-ehlementa-vnutri-sozdavshego-ego-obekta.html)

pauluss 06.09.2010 13:52

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

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

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

Хочется сделать красиво, чтоб объект был самодостаточным и вся работа проходила внутри него.
Спасибо.

jetli13 06.09.2010 14:18

$("<TD>").appendTo(parentElement).click('MyClass.M ethod');

B~Vladi 06.09.2010 22:42

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

А вообще методы лучше в прототип выносить.

jetli13 07.09.2010 11:03

Цитата:

А вообще методы лучше в прототип выносить.
почему лучше?

B~Vladi 07.09.2010 14:19

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

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

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

jetli13 07.09.2010 15:17

B~Vladi,
Почему то не могу поставить плюс )
Спасибо за ответ

B~Vladi 07.09.2010 15:22

Цитата:

Сообщение от jetli13
Почему то не могу поставить плюс )

Да, бывает)

pauluss 07.09.2010 16:02

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

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

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

Спасибо.

pauluss 07.09.2010 16:08

Прошу пардона, работает.
Но все таки как быть с параметрами?

B~Vladi 07.09.2010 17:35

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

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

jQuery рулит, да?;)


Часовой пояс GMT +3, время: 16:00.