![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Всем привет!
Делаю выпадающие менюшки. Хочу сделать что бы они исчезали когда кликают вне их дива. Как это отловить? Заранее спасибо! |
|||
|
||||
| Dagger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 377 Регистрация: 4.9.2002 Где: Киев Репутация: 1 Всего: 8 |
Когда происходит событие "onmouseover" над менюшкой тебе следует прицепить к телу документа (тэг body) ивент "click". Следующий шаг – проверка координат мышки. Если координаты в пределах твоего выпадающего меню - игнорируешь, иначе – закрываешь.
Решение, на мой взгляд, довольно грубое, но работает отлично. Особенно, если ты используешь фреймворк (jQuery или чето типа этого) |
|||
|
||||
| IDVsbruck |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: 7 Всего: 22 |
Да, грубовато ... Начало правильное: назначаем body событие onclick, где можем получить объект, который вызвал это событие (для ИЕ это window.event.srcElement). Соответственно, проверяем его на соответствие диву меню и делаем нужные действия. Пару "моментов":
- для разных браузеров есть универсальное средство получение эвента; - для разных браузеров инвокер называется по-разному (для ФФ это event.target), но есть универсальное получение таргета; - когда менюшка закрывается, событие убираем. |
|||
|
||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Да, я использую jQuery. Есть для него реализации? Как не нём это сделать? Или же придётся всё на "JavaScript-е" делать?
|
|||
|
||||
| Dagger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 377 Регистрация: 4.9.2002 Где: Киев Репутация: 1 Всего: 8 |
Простейший способ:
|
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| NNaarreekk |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 768 Регистрация: 23.6.2007 Где: Армения Репутация: 2 Всего: 3 |
А не легче:
? Поленился проверить код, так что если не работает не ругать! |
||||
|
|||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Dagger, Так и реализуют это? Какие ещё подводные камни могут быть?
ksnk, нету там подходящих мне. Я так и не научился там плагины искать NNaarreekk, это другое. Мне не потеря фокуса нужна, а клик вне дива. |
|||
|
||||
| Dagger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 377 Регистрация: 4.9.2002 Где: Киев Репутация: 1 Всего: 8 |
у меня была схожая задачка и я ее решил простейшим для меня способом (как в моем примере) , но моя задачка – всего лишь частный случай твоей.
Тебе надо определенно ее сделать поабстрактней Советую обратить внимание на пост IDVsbruck, я не проверил и ничего не могу сказать по существу, но в идеале это самое рациональное решение. Добавлено через 2 минуты и 23 секунды По поводу подводных камней – не забывай делать unbind клика после исчезновения меню. Баги с биндами ивентов трудно заметить. |
|||
|
||||
| ksnk |
|
||||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
А вот как это пишется на jQuery. Кусочки кода натырены из плагина datePicker
Показываем меню и ставим:
Закрываем меню функцией _closeCalendar, в ней делаем
Ну, а _checkMouse определяется в функции инициализации объекта datePicker и выглядит примено так
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||||
|
|||||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Ок, спасибо.
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |