2009-10-05 4 views
0

У меня есть «onmouse over», даже связанный с всего элементов страницы. Когда мышь над элементом, он рисует красную границу с ближайшим верхним соответствующим элементом (например, пример aardvark).Неожиданное поведение «onmouseover» с jQuery

У меня есть follwing код:

<p> 
<img height="333" width="250" title="Image par hyperbolic pants explosion sous licence CC - http://www.flickr.com/photos/[email protected]/2716444681/" class="illustred" src="context-selector-test_files/rha_20090929_antivirus.jpg" /> 
Ah là là... ces abrutis qui continuent à refuser d'installer des antivirus parce que " 
<em> 
Je ne télécharge pas ! 
</em> 
" ou " 
<em> 
Je ne vais que sur des sites de confiance. 
</em> 
</p> 

Вы можете видеть, что "IMG" находится внутри "P".

Ожидаемое поведение заключается в том, что когда я перехожу через «P», он становится граничным, а затем, когда я иду на «IMG», граница переходит к «IMG».

Это не так.

Проблема не в CSS, потому что я не использую CSS, а 4 divs для имитации 4 границ в позиции «абсолютный» вокруг элемента. Это обязательно для следующего.

Проблема возникает, когда я перехожу через «IMG», «наведение мыши» действительно запускается, но по ошибке, «мышь» снова запускается на «P». Я бы понял «P -> IMG», но «IMG -> P» меня задевает. И почему, 2 указателя мыши в одной строке? Я не двигал мышью.

Теперь, что мне не хватает?

характеристики:

  • HTML 4;
  • css 2;
  • jquery 1.3;
  • firefox 3.5;
  • ubuntu 9.04;
  • кофе 1.50 (l).
+0

Мне пришлось удалить изображение со своего поста, потому что ImageShack удалил его и заменил его рекламой. См. Http://meta.stackexchange.com/q/263771/215468 для получения дополнительной информации. Если возможно, было бы здорово, если бы вы повторно загрузили их. Благодаря! – Undo

ответ

1

Остановить распространение события в обработчике mouseover.

$('selector').mouseover(function(e) { 
    ... 
    e.stopPropagation(); 
}); 

Вы также можете подумать об использовании метода hover() или hoverIntent() плагина. Последний поможет уменьшить любое мигание, поскольку вы просто перетаскиваете указатель мыши по странице, выполняя временное ожидание до вызова обработчика события.

+0

Еще лучше, используя e.stopPropagagtion(). –

1

Вы попадаете на событие Bubbling.

Использовать mouseenter() вместо mouseover.

+0

На самом деле я использую «mouseenter», но я все равно глуп. –

0

Хорошо, я хочу убить себя, но вот answser.

Я тупо забыл прекратить распространение события. Функция обратного вызова, вызываемая при срабатывании «onmouseover», должна, конечно же, вернуться, выполнила ли это свою работу или нет. Верните «false», если вы не хотите, чтобы событие было барботировано любым верхним.

Теперь, проведя 3 часа на эту тему, вы извините меня, я должен повесить себя. Приветствия.

P.S: Я завещаю всю свою репутацию SO в вики сообщества.