![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 9 Всего: 67 |
Здравствуйте.
Есть скрипт, который на лету создает форму. Скрипт выполнен в виде класса для того, чтобы этих форм можно было создать несколько. Мне необходимо на обработку нажатия кнопки навесить выполнение метода класса. Как это сделать? PS. Кажется непонятно объяснил что нужно, но как это сказать подругому не представляю. -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| vasac |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 13 Всего: 36 |
>метода класса...
объекта видимо? тогда можно так:
Это сообщение отредактировал(а) vasac - 5.6.2006, 14:09 |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 9 Всего: 67 |
Вот начал пробовать...
Не могу понять как мне получиить ссылку на созданный button, чтобы навесить на него обработчик. -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| vasac |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 13 Всего: 36 |
Ссылку на элемент можно получить через его id (если указать, конечно):
А в данном случае можно просто:
|
||||
|
|||||
| 12345c |
|
||||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Вопрос не самый тривиальный, поэтому перенёс сюда.
(Продолжая тему...) В данном случае вызываете метод нужного экземпляра класса:
Обработчик:
Можно и addEventListener() /FF/ + attachEvent() / IE / , но длиннее. |
||||
|
|||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Так увы не прокатит, поле testClick содержит просто функцию не привязанную к обьекту. Правильный метод от vasac, нужно создавать closure, который будет вызывать метод на требуемом обьекте. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
|
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Угу, ибо функция не обращаеться к полям обьекта, попробуй то же самое, да так что бы testClick alert'ило внутреннее поле.
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| 12345c |
|
||||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Я понял идею, но исходно:
А так конечно, вот что получается там и там:
-------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
||||
|
|||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Ладно, офтопим дальше!
Начнём с того что классов в JS нет, он относиться к prototype-based языкам которые отвергают разделение обьектов на шаблоны (классы или "множество обьектов одного типа" если глубже). Вместо этого обьекты копируються (от прототипа) либо создаються с нуля. Отсюда чисто физически нельзя вызвать метод класса, в твоём коде человеческим языком: вызвать замыкание определённое в функции ClassCreateForm. Всё. Никакой связи с созданным обьектом. Есть связь с вызванной функцией, сохраняеться контекст вызова который ты не используешь, т.к. функция это замыкание. Интересно что в ECMAScript 4 (JS2) прототипная основа JS заменяеться на привычные всем классы. Да, классы проще понять и на их основе проще поставить правила (рельсы), по которым будет сложней делать ошибки. С другой стороны код становиться более громоздким. Прототипное программирование очень гибкое, в этом и сложность, полученная софтина может выйти из под контроля, когда появяться "тайные братства" не известно откуда взявшихся обьектов
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Это всё споры о терминах. Я говорю в привычном ключе. Если функция используется для порождения объекта - она класс. Если для вызова функций - метод. В JS, несмотря на смешение двух функциональностей, легко прослеживается, для какой функциональности написана данная функция. Возвращаясь к теме, только автор вопроса может посмотреть и сказать, что он хотел видеть - пример с id=b1 или b2.
Что касается теории (не знаю, кому говорю |
|||
|
||||
| Sardar |
|
||||||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
В каком смысле? Никакой связи у замыкания лежащего в testClick с обьектами elemClassCreateForm2 и elemClassCreateForm3 нет. Они винды только по имени, как и в любой другой функции определённой где угодно, т.к. являються глобальными в данном случае обьектами.
Нет, ничего обьявленно не было. Замыкание уже создано с контекстом от ClassCreateForm при создании обьекта elemClassCreateForm2. В данной строке происходит простое присваивание, такое же как присваивание любого другого значения.
Назвать конструктор классом нельзя не только из идейных соображений, ты физически не можешь вызвать какие либо другие "методы класса" из своего замыкания. Да, можно явно задать ссылку и на созданный обьект и на конструктор, после пользоваться ими. Но это именно "явно что ли бо сделать", а не фишка поддерживаемая языком. Связи у замыкания с контруктором ClassCreateForm на прямую (так что бы можно было что нибудь с этим сделать полезное) тоже нет, сохраняетсья только конктекст вызова.
Попробуй -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||||||
|
|||||||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 9 Всего: 67 |
Мдя... Нужно мне учится задавать вопросы...
Мне не подходит ни один из предложенных вариантов. У меня в конструкторе класса создается форма. На клик по одной из кнопок этой формы мне необходимо подвесить обрадотчик, который, скажем, прятал бы форму. Пытаюсь сделать это так:
В результате плучаю алерт при создании объекта и тот *Андефайнед*. Подскажите что делаю не так. -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
this.Submit() и прочие вызываешь из замыкания (функции). Как уже неоднократно говорилось this у каждой функции свой и являеться обьектом на ком вызвали функцию. В данном случае используеться "традиционная" модель событий, т.е. браузер вызывает твой_html_елемент.onclick(), в результате this указывает на твой элемент. Не веришь?
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 9 Всего: 67 |
Честно говоря, ничего не понял... Я ж задавал вопрос в ветку *для начинающих* оценивая не сложность вопроса, а свой уровень.
*Объект не поддерживает это свойство или метод.* на строке document.getElementById(bCancelId).onclick = function(){this.Close()}; с вариантом document.getElementById(bCancelId).onclick = this.Close; получаем undefined. -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |