![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Ghirik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 919 Регистрация: 26.3.2007 Репутация: 13 Всего: 20 |
Просвятите, пожалуйста.
Есть ли в JavaScript или DOM возможность назначить своё событие. Ну, типа, как создаются динамические объекты, так же назначить событие для объекта. Например, чтобы по совпадению условий происходило событие. Это сообщение отредактировал(а) Ghirik - 8.9.2007, 13:09 -------------------- Отдадим всё клиенту, пускай его машина мучается... |
|||
|
||||
dXdYdZ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 16.4.2007 Репутация: 3 Всего: 4 |
|
|||
|
||||
Ghirik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 919 Регистрация: 26.3.2007 Репутация: 13 Всего: 20 |
dXdYdZ, я видел этот код в вашей библиотеке, но честно скажу, я не могу в нем разобраться. Очень вас прошу, покажите на простом примере. К примеру, чтобы событие рождалось при изменении любого из свойств объекта.
Это сообщение отредактировал(а) Ghirik - 8.9.2007, 19:40 -------------------- Отдадим всё клиенту, пускай его машина мучается... |
|||
|
||||
dXdYdZ |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 16.4.2007 Репутация: 3 Всего: 4 |
В JavaScript присутствуют стандартные виды событий. Прочитать о них можно,
например, здесь. Для динамического (с помощью JavaScript) подключениия обработчиков событий с помощью представленных выше функций
Пример использования: Есть узел, к нему надо прицепись событие обработки наведения мыши
Отключить событие можно так:
|
||||||
|
|||||||
Ghirik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 919 Регистрация: 26.3.2007 Репутация: 13 Всего: 20 |
Большое спасибо, пример стал понятен, но...
Мне нужно создать своё событие например у фона страницы изменился цвет, это есть событие. И мне нужно при изменении цвета фона на красный(к примеру), выполнить функцию. Вы предлогаете подключить имеющиеся в HTML, DOM, или ещё где, события. В IE есть для таких случаев событие propertychange, но Mozilla его не поддерживает. Я и подумал, а нельзя ли самому описать условия возникновения своего события. Mozilla поддерживает какие нибудь события, возникающие при изменении атрибутов, свойств или стилей? Это сообщение отредактировал(а) Ghirik - 8.9.2007, 22:16 -------------------- Отдадим всё клиенту, пускай его машина мучается... |
|||
|
||||
dsCode |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: 19 Всего: 26 |
Ghirik, Вам нужно среагировать на изменение фона. Реакция в данном случае - есть обработчик Вашего события onBackgroundChange (имя придумайте сами). Реакция так же - всего лишь функция, вызванная в нужное время - в Вашем случае - когда меняется фон (в том месте, где Вы меняете фон, - вызывайте обработчик данного события).
|
|||
|
||||
Ghirik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 919 Регистрация: 26.3.2007 Репутация: 13 Всего: 20 |
Ммм, да...
Действительно, плохо формулирую вопросы.... Но, похоже, ответ на вопрос "можно ли создать своё событие" получил - нельзя. У Вас наверное даже в голове не укладывается, как такое можно спрашивать. ![]() ![]() Это я от плохого представления всей иерерхии Объекты-Методы-События. Уж извините, что мозги запудрил. -------------------- Отдадим всё клиенту, пускай его машина мучается... |
|||
|
||||
dsCode |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: 19 Всего: 26 |
Ghirik, это смотря с какой стороны смотреть. Я Вам сказал, что можно создать абсолютно любое СВОЕ событие, но все зависит от контекста. Если говорить о стандартных объектах (таких как в Вашем примере - бэкграунд и т.п.) - то точно не скажу, скорей всего, придется ограничиться стандартными событиями, доступными в конкретной версии JS и браузера (событиями, об атаче и ремуве которых говорит
dXdYdZ). Но! Если Вы пишите свой фреймворк со своими тегами, то СВОЕ событие (а точнее сказать - возникновение своего события) - это ничто иное, как вызов определенного "метода"/функции в нужное время. Однако, Ваши события будут в любом случае порождены от стандартных событий. В сущности, СВОИ события - это даже не совсем события, лучше сказать псевдособытия - просто так удобней. Где-то вы описываете "метод"/функцию onSelectRow(...) (тут придумайте все, что угодно - onChangeProperty, onLoadData и т.д.). Далее, пример с таблицей ("класс таблицы"): в СТАНДАРТНОМ событии onClick для ряда таблицы, Вы вызываете свой метод onSelectRow с нужными параметрами. Нужные параметры - это в данном случае "параметры из объекта таблицы". Таким образом - единожды описав в "классе" для работы с таблицей событие onClick (и то, что оно вызовет "событие", onSelectRow), далее в каждом из объектов этого "класса" Вы можете использовать событие onSelectRow(нужный_параметр_касающийся_конкретного_объекта_"класса"). |
|||
|
||||
Ghirik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 919 Регистрация: 26.3.2007 Репутация: 13 Всего: 20 |
dsCode, спасибо, а если зациклить(запустить сразу сотню таймаутов) setTimeout, как я делал в этой функции:
Идентификаторы я могу сложить в массив, но как потом отследить, что закончился определенный таймаут? Вот здесь бы очень пригодилось поддерживаемое браузером событие "onOpacity". В IE наверное можно применить имеющийся обработчик события propertychange, а в других.... Конечно, можно не запускать не контролируемые задания, но мне очень нравится такой подход, задал задание и забыл.... Произошло событие, обработал. -------------------- Отдадим всё клиенту, пускай его машина мучается... |
|||
|
||||
dsCode |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: 19 Всего: 26 |
Ghirik, не совсем понял, зачем идентификаторы в массив (ну надо, так надо). А по поводу "закончился определенный тайм-аут": вообще, JavaScript не мультипоточный (в полном понимании этого слово) язык. Он имеет всего 2 (два) потока - основной и поток setTimeout'a (и setInterval'a). На основе этого можно создать псевдо-мультипоточность. То, что Вы запускаете 100 сетТаймаутов вероятно должно означать, что функции во втором потоке выстроятся в зависимости от назначенного времени. В Вашем случае можно поступить как я и говорил выше - поймать Ваше onOpacity в нужном месте (Вы же сами правильно сказали в первом посте "чтобы по совпадению условий происходило событие" - это, опять же, ничто иное, как вызов в нужное время нужной функции):
Каждый тайм-аут сработает в нужное время и вызовет Ваше "событие" onOpacity, в котором уже Вы вольны делать все, что захотите. Я специально сделал 4 тайм-аута, начиная с большего времени и, сделав два тайм-аута с одинаковым временем. Посмотрите - тайм-ауты с 1000 миллисекунд сработают раньше всех но последовательно (выстроенные в очередь во втором потоке). Тайм-ауты с бОльшим временем сработают в свое время - и с нужными значениями. Это сообщение отредактировал(а) dsCode - 9.9.2007, 15:57 |
|||
|
||||
Ghirik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 919 Регистрация: 26.3.2007 Репутация: 13 Всего: 20 |
Всё понял!!! Большое спасибо за потраченное на разъяснение время. Недавно занимаюсь JavaScript-ом, в голове всё перепутано....
![]() ![]() -------------------- Отдадим всё клиенту, пускай его машина мучается... |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |