![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| XEugene |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: нет Всего: 2 |
Делаю обычное выпадающее меню. При наведении мыши на заголовок меню оно выпадает, при onmouseout убирается.
Проблема в том, что onmouseout возникает при перемещении курсора мыши по выпавшей менюшке, когда курсор наводится на ссылку - пункт меню. Как с этим бороться?
|
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Нужно отлавливать элемент, над которым в текущее время курсор и, если он над текущим подменю, то в зависимости от своих нужд либо прерывать дальнейшую передачу события, либо наоборот. Подробнее читай в моей статье "все о событиях", ссылка в подписи.
|
|||
|
||||
| XEugene |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: нет Всего: 2 |
Или как вариант, определение координат выпавшего подменю и координат курсора в момент возникновения mouseover.
Идея понятна, завтра попробую. Пока немного подправил скрипт, а то первоначальный вариант страшненький
Это сообщение отредактировал(а) XEugene - 13.5.2009, 08:38 |
|||
|
||||
| XEugene |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: нет Всего: 2 |
Вот так я определяю, что mouseover произошло над ссылкой подменю и прерываю всплытие события.
Почему-то не срабатывает код прерывающий всплытие события
|
||||
|
|||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
попробуй так:
|
|||
|
||||
| XEugene |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: нет Всего: 2 |
Нет, и так не срабатывает. Причем во всех браузерах.
|
|||
|
||||
| Aliance |
|
||||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Попробуй замени все
на
Если не поможет, то перед тем кодом, что я писал в предыдущем посте, поставь алерт и проверь - срабатывает ли он вообще. |
||||
|
|||||
| XEugene |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: нет Всего: 2 |
Если вернуть function(e)
|
||||
|
|||||
| Soah |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 18.2.2009 Репутация: 8 Всего: 54 |
? |
|||
|
||||
| XEugene |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: нет Всего: 2 |
И так нет. А чем это отличается от моего варианта, кроме того, что переменная evt глобальная(зачем?).
|
|||
|
||||
| Soah |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 18.2.2009 Репутация: 8 Всего: 54 |
||||
|
||||
| youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 2 Всего: 16 |
1) а почему есть элементы с одинаковым id?
2) при чем тут cancelBubble/stopPropagation? 3) кроме того, cancelBubble/stopPropagation не прерывают выполнение обработчика и "menuDiv.style.visibility = "hidden";" все равно выполняется 4) почему определяются границы target/srcElement, ведь на ссылках подменю тоже возникает mouseover 5) еще надо предусмотреть mouseover для пунктов главного меню 6) а еще можно ведь смотреть к какому элементу переходит мышка (без определения координат) |
|||
|
||||
| XEugene |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: нет Всего: 2 |
1)Html скопипастил откуда-то, поправлю. 2)А что же причем, если мне нужно предотвратить всплытие события? 3)В этом и вопрос. Почему они его не прерывают, если должны? 4)Проверяется, что mouseout возник внутри подменю. А там его могла вызвать только ссылка и это событие нужно придушить. 5) Согласен 6)Искал подобное, но что-то не нашел. Надо поискать еще, буду благодарен за пример или ссылку. Добавлено через 7 минут и 6 секунд Soah, у меня переменная содержащая объект события доступна в нужном месте
|
|||
|
||||
| youri |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 2 Всего: 16 |
у тебя два обработчика при чем на таких эелментах, что событие не может "всплыть" из одного обработчика в другой они не должны, он отменяют всплытие события, а выход из функции выполняется с помощью return
проверяется, что mouseout произошел внутри target/srcElement, а это вполне может быть ссылка
могу объяснить: при onmouseout target/fromElement - откуда перешла мышка, relatedTarget/toElement - куда... переходить можно с пункта главного меню на его подменю и назад, при остальных переходах нужно скрывать подменю
переменная не делается глобальной |
||||||
|
|||||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Я обще не понимаю, а зачем тут нужна JQuery? На мой взгляд, все фреймворки пытаются скрыть такую убогую магию от программиста.
Вот так мог бы выглядеть стартовый пример, если бы пользоваться jQuery немного больше.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |