Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Ложное срабатывание onmouseout - возникает, когда курсор проходит над строкой текста (https://javascript.ru/forum/events/31172-lozhnoe-srabatyvanie-onmouseout-voznikaet-kogda-kursor-prokhodit-nad-strokojj-teksta.html)

Почемучкин 29.08.2012 04:29

Ложное срабатывание onmouseout - возникает, когда курсор проходит над строкой текста
 
Блочный элемент имеет внутри себя параграф с текстом и ссылками. При прохождении курсора над ссылкой срабатывает onmouseout, как если бы курсор вышел за пределы этого блочного элемента.

Как с этим бороться? Может есть изящный метод?

devote 29.08.2012 06:34

onmouseleave
вот тут подробнее http://javascript.ru/forum/misc/3050...ut-i-link.html

Юсуф 29.08.2012 08:01

Я так понял, оно у Вас должно срабатывать когда курсор внутри блока?Если так то сделайте так задайте блоку div такие вот стили
#div {background-color: red; height: 50px;}

Этим вы узнаете сместился ли ваш блок а если так, то задайте высоту блоку, я указал 50px но должны указать свой размер. Если не так Вас понял то простите

cyber 29.08.2012 11:00

вот функция срабатует только когда курсор ушел с элемента а не ушел на потомка
function hover (options) {

 options.elem.onmouseover = ElemMouseAction;	 
 options.elem.onmouseout = ElemMouseAction;
 	
 function ElemMouseAction (evt) {
  var related, Call;
  var e = evt || event;	 
 
	if(e.type == 'mouseover'){  
	  Call = options.over; 
	  related = e.relatedTarget || e.fromElement;
	  
	} else {
	  Call = options.out; 
	  related =  e.relatedTarget || e.toElement;
	  
		}
		
			
	while (related && related != this) {
		related = related.parentNode;
		} 
	  
	  if(related == this) return;
	 
	  Call();
	 
	 }	

	
	}
//пример вызова
hover({
 elem: document.getElementById('elem'),
 over:function () {//функция для mouseover
   .... 
   },
   out:function () {//функция для mouseout
   .... 
   },

})

Почемучкин 29.08.2012 14:29

Спасибо!

Кстати, оказалось, что onmouseleave работает не только под IE, но и под FireFox 13 - и у него нет подобного эффекта. Однако для кроссбраузерности это все равно не годится.

В общем, правильно считать, что при onmouseout не курсор выходит за пределы элемента, как об этом пишут, а элемент скорее теряет фокус (или как это правильнее сказать?)
А вот onmouseleave происходит именно когда курсор покидает пределы элемента (но к сожалению работает не везде).

bes 29.08.2012 15:16

вы ж здесь с 2011 http://learn.javascript.ru/mousemove-events

Почемучкин 29.08.2012 16:10

bes,
Ну, я мимоходом)

cyber 29.08.2012 20:44

Цитата:

Сообщение от Почемучкин (Сообщение 201399)
Спасибо!

Кстати, оказалось, что onmouseleave работает не только под IE, но и под FireFox 13 - и у него нет подобного эффекта. Однако для кроссбраузерности это все равно не годится.

В общем, правильно считать, что при onmouseout не курсор выходит за пределы элемента, как об этом пишут, а элемент скорее теряет фокус (или как это правильнее сказать?)
А вот onmouseleave происходит именно когда курсор покидает пределы элемента (но к сожалению работает не везде).

глюк в том что mouseout/mouseover из за всплытия срабатывает когда курсор переходит на дочерний элемент , а mouseenter/leave не кроссбраузерно поэтому я и написал ту функцию для себя(давно)


Часовой пояс GMT +3, время: 04:39.