| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: для новичков > Клик вне DIV'a. |
| Автор: Elfet 12.12.2008, 00:08 |
| Всем привет! Делаю выпадающие менюшки. Хочу сделать что бы они исчезали когда кликают вне их дива. Как это отловить? Заранее спасибо! |
| Автор: Dagger 12.12.2008, 01:21 |
| Когда происходит событие "onmouseover" над менюшкой тебе следует прицепить к телу документа (тэг body) ивент "click". Следующий шаг – проверка координат мышки. Если координаты в пределах твоего выпадающего меню - игнорируешь, иначе – закрываешь. Решение, на мой взгляд, довольно грубое, но работает отлично. Особенно, если ты используешь фреймворк (jQuery или чето типа этого) |
| Автор: IDVsbruck 12.12.2008, 05:52 |
| Да, грубовато ... Начало правильное: назначаем body событие onclick, где можем получить объект, который вызвал это событие (для ИЕ это window.event.srcElement). Соответственно, проверяем его на соответствие диву меню и делаем нужные действия. Пару "моментов": - для разных браузеров есть универсальное средство получение эвента; - для разных браузеров инвокер называется по-разному (для ФФ это event.target), но есть универсальное получение таргета; - когда менюшка закрывается, событие убираем. |
| Автор: Elfet 12.12.2008, 15:26 |
| Да, я использую jQuery. Есть для него реализации? Как не нём это сделать? Или же придётся всё на "JavaScript-е" делать? |
| Автор: Dagger 12.12.2008, 16:06 | ||
Простейший способ:
|
| Автор: ksnk 12.12.2008, 16:32 |
| Elfet, А чем плагины для jQuery не подошли? http://plugins.jquery.com/project/Plugins/category/44 их там 46 штук... |
| Автор: NNaarreekk 12.12.2008, 20:40 | ||||
А не легче:
? Поленился проверить код, так что если не работает не ругать! |
| Автор: Elfet 14.12.2008, 17:17 |
| Dagger, Так и реализуют это? Какие ещё подводные камни могут быть? ksnk, нету там подходящих мне. Я так и не научился там плагины искать NNaarreekk, это другое. Мне не потеря фокуса нужна, а клик вне дива. |
| Автор: Dagger 14.12.2008, 18:30 |
| у меня была схожая задачка и я ее решил простейшим для меня способом (как в моем примере) , но моя задачка – всего лишь частный случай твоей. Тебе надо определенно ее сделать поабстрактней Советую обратить внимание на пост IDVsbruck, я не проверил и ничего не могу сказать по существу, но в идеале это самое рациональное решение. Добавлено через 2 минуты и 23 секунды По поводу подводных камней – не забывай делать unbind клика после исчезновения меню. Баги с биндами ивентов трудно заметить. |
| Автор: ksnk 14.12.2008, 18:59 | ||||||
| А вот как это пишется на jQuery. Кусочки кода натырены из плагина datePicker Показываем меню и ставим:
Закрываем меню функцией _closeCalendar, в ней делаем
Ну, а _checkMouse определяется в функции инициализации объекта datePicker и выглядит примено так
|
| Автор: Elfet 14.12.2008, 20:04 |
| Ок, спасибо. |