![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| katka |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 19.7.2004 Репутация: нет Всего: 6 |
мне кажется, вопрос довольно распространённый, только я никак не найду похожую тему. если была - покажите, пожалуйста.
мы пишем имитацию выпадающих списков, и нам нужно скрывать список (див) при клике мимо него. есть функция hide_all_selects(), но на какое событие её повесить? что бы вы посоветовали? --------------------
если с другом буду я, если с другом буду я, а медведь — без друга |
|||
|
||||
| Avb |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.7.2006 Репутация: 4 Всего: 13 |
||||
|
||||
| katka |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 19.7.2004 Репутация: нет Всего: 6 |
о! спасибо. сама не нашла.
--------------------
если с другом буду я, если с другом буду я, а медведь — без друга |
|||
|
||||
| Burrr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 4.9.2005 Репутация: 10 Всего: 20 |
Можно проще - воспользоваться свойством cancelBubble объекта event.
1) На body повесить обработчик, скрывающий выпадушку по клику 2) На саму выпадушку повесить обработчик, который запретит событию распространятся вверх по дереву DOM
|
|||
|
||||
| Avb |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.7.2006 Репутация: 4 Всего: 13 |
Но в таком случае нужно учесть, что обработчик, скрывающий выпадушку, будет вызываться при каждом клике в пределах документа. Если в нем кроме divElement.style.display = 'none' ничего нет, то тогда все ОК. А если есть дополнительные действия, то нужно смотреть по ситуации. Burrr, не так ли? |
|||
|
||||
| Burrr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 4.9.2005 Репутация: 10 Всего: 20 |
Avb, совершенно верно, Но я бы не сказал, что в этом есть какие-то затруднения. Обычно я пишу обработчик так:
Вписываем туда функций, сколько влезет... |
|||
|
||||
| Avb |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.7.2006 Репутация: 4 Всего: 13 |
Burrr, я имел в виду не невозможность выполнять несколько функций, а возможные затупления, если вдруг при каждом скрытии дивов необходимо выполнять какой-то "тяжелый" код.
И то это чисто теоретически, т. к. этот тяжелый код можно не выполнять, если див невидимый. Просто katka, должна это учесть и при необходимости добавить дополнительные проверки. |
|||
|
||||
| katka |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 19.7.2004 Репутация: нет Всего: 6 |
--------------------
если с другом буду я, если с другом буду я, а медведь — без друга |
|||
|
||||
| Burrr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 4.9.2005 Репутация: 10 Всего: 20 |
Это сообщение отредактировал(а) Burrr - 18.10.2006, 16:59 |
|||
|
||||
| katka |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 19.7.2004 Репутация: нет Всего: 6 |
мне во все функции с обработкой кликов пихать евент в скобочки? блин. простите, ради бога, но я ничего не поняла опять ((
вот, давайте с примером..
в моём идиллическом мире нет никаких евентов, к сожалению --------------------
если с другом буду я, если с другом буду я, а медведь — без друга |
|||
|
||||
| Burrr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 4.9.2005 Репутация: 10 Всего: 20 |
Да, а в чем проблема? Это нужно для мозиллы, ИЕ работает на window.event.
Это сообщение отредактировал(а) Burrr - 18.10.2006, 17:21 |
||||
|
|||||
| katka |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 19.7.2004 Репутация: нет Всего: 6 |
Burrr, спасибо!! рработает!! красота!
--------------------
если с другом буду я, если с другом буду я, а медведь — без друга |
|||
|
||||
| Avb |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.7.2006 Репутация: 4 Всего: 13 |
Ну, и я тут примерчик набросал:
Добавлено @ 18:22 katka, советую почитать раздел Events на http://www.quirksmode.org/js/contents.html для лучшего понимания обработки событий. Это сообщение отредактировал(а) Avb - 19.10.2006, 10:58 |
|||
|
||||
| Nicholas_S |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: 5 Всего: 19 |
Есть более изысканное решение для "отлова" событий вне объекта.
Заключается он в использовании методов setCapture()/releaseCapture(). Например:
После нажатия на кнопку слой будет принимать событие onClick из любой области документа. Фича поддерживается IE. Чтобы расширить на Mozilla/Opera, можно определить прототипы для элементов документа. Например, следующим образом:
Вуаля. -------------------- ...все в мире относительно |
||||
|
|||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Строчка evt = evt || window.event; для такого примера не обязательна, и cancelBubble - это всё же не комильфо для тех браузеров, что знают и умеют stopPropagation. |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |