![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Serge2k |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.7.2005 Репутация: нет Всего: нет |
Всем привет. я конечно повторюсь, и ничего нового в своем вопросе не спрошу, но просто очень срочно нужно это дело решить. Так что заранее извиняюсь.
Проблема вот в чем. Есть такой код
Так вот. Когда мышка заходит на внутренний div, это вызывает onmouseout внешнего div. А мне нужно, чтобы это событие происходило, только когда мышь выходит за границы общего div'а. Нарыл в инете решения этих проблем, но некоторые не подошли... а некоторые только для конкретных браузеров. Так что прошу Вашей помощи. Ну... естественно во внешнем теге, может быть сколь угодно много разных элементов... И все это дело должно работать нормально... Заранее спасибо. Это сообщение отредактировал(а) Serge2k - 18.1.2007, 12:39 |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Да, это очень не удобная фишка, придуманная ещё пьяными нетскейповцами и с тех пор ничего (ради совместимости) не менялось. Можешь обращаться к event.(srcElement|target) и проверять не является ли он дочерним элементом (итерируя до внешнего дива или пользуясь методом .contains).
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
||||
|
||||
Serge2k |
|
||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.7.2005 Репутация: нет Всего: нет |
хм... если не затруднит малек поподробнее... Добавлено @ 15:23
видел, народ что то писал про contains. Но я так понял что он тока в IE реализован? И потом, если я правильно понимаю, мне в этом случае надо будет к каждому внутреннему элементу привязывать обработчик события... или нет? Это сообщение отредактировал(а) Serge2k - 18.1.2007, 15:25 |
||||
|
|||||
Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Нет, из обработчика самого внешнего элемента проверяем this.contains(event.(srcElement|target)). Метод contains сделать просто, хотя не эффективно:
Но способ от Zeroglif лучше и логичней. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
http://developer.mozilla.org/en/docs/DOM:event.relatedTarget http://msdn.microsoft.com/library/default....s/toelement.asp У тебя на диве висит onmouseout, когда мышом двигаешь и срабатывает это событие, то всегда есть объект, на котором оно сработало/родилось, это srcElement или target. Иногда нужно узнать, "куда ты ушёл" после того, как событие сработало, это - toElement или relatedTarget. Соответственно, когда ты уходишь с внешнего дива на внутренний, то внешний - target, а внутренний - relatedTarget и наоборот, при выходе из внутреннего во внешний. Отсюда, нужна функция, которая будет перекрывать обработку события, если relatedTarget-ом будет внутренний, или внешний див. Что-нибудь вроде (очень приблизительно):
Но нужно учесть, что Опера наверняка заглючит... плюс, если ещё внутри блоки, то сложнее. ![]() |
|||
|
||||
Serge2k |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.7.2005 Репутация: нет Всего: нет |
Пасибки.... Буду пробовать...
![]() |
|||
|
||||
12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Тут есть статья - как пограмотнее работать с событиями. Не избегать их, а обязательно обрабатывать парами - over и out. Тогда не будет проблем с отслеживанием ухода с дива.
http://js2.ru/subs/subs018.shtml - "Контроль за перемещениями мыши." Это сообщение отредактировал(а) 12345c - 3.3.2008, 12:47 -------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |