| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Применение библиотек > jquery mouseover почему для всех дочерних устан-ся |
| Автор: zammar 22.7.2013, 15:41 | ||||
jQuery v1.10.1
Событие срабатывает и для дива и для таблицы и для всех вложенных элементов? Почему не пойму. Подскажите пожалуйста. |
| Автор: Arantir 22.7.2013, 15:59 |
| Может потому что все, что внутри mini_basket - это в том числе он сам? События по умолчанию всплывают по всему дереву элементов. К примеру, mousever на тег html будет работать в любом месте страницы, чтобы там ни было. Причем, это не причуды jQuery, а свойства самого JS. |
| Автор: zammar 22.7.2013, 16:08 | ||||
Всплывают да, но я ведь не назначаю на них события. Я ведь назначаю только на их родителя. Почему события "всплывает" на дочерние элементы?
Или я что-то не понимаю или какая разница тогда между onMouseMove и onMouseOver? Ну ладно, а если я хочу чтобы событие происходило ТОЛЬКО при наведение на <div id="mini_basket"> и не происходило в любых других случаях? Как это сделать тогда |
| Автор: zammar 22.7.2013, 16:50 |
| Да, надо подучить эти события. Но теперь такая фигня. Думаю, но не въезжаю почему так. Срабатывает mouseover при наведении. И что для меня странно это же событие mouseover срабатывает когда я уношу курсор с дива. Это по идее onmouseout же? |
| Автор: Arantir 22.7.2013, 17:48 |
| Потому что переход от дочернего к mini_basket - это еще один mouseover. mouseover будет снова и снова возникать для родителя при каждом его возникновении на дочерних элементах. stopPropagation() остановит ивент от дочернего. Но переход от дочернего к самому mini_basket по прежнему считается за mouseover. Для наглядности http://jsfiddle.net/pgzdF/1/ И вообще в объекте event есть очень много чего полезного. По свойству target можно определить, откуда именно событие началось. И, например, поставить условие по id или по имени класса (сделать return при неподходящем). stopPropagation не единственный способ, но более универсальный. В целом зависит от обстоятельств и желаемого результата. |
| Автор: Amphiluke 22.7.2013, 18:21 |
| Вместо использования .stopPropagation() предпочтительнее просто применять события http://api.jquery.com/mouseenter/ и http://api.jquery.com/mouseleave/, которые избавлены от нежелательного эффекта срабатываеия на вложенных элементах. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51ed289e6ccc19d315000003#findElement_E7045_51ed4df86ccc194d43000678_0 |
| Автор: zammar 22.7.2013, 19:13 |
| Спасибо, всем! |