onmouseout with image
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<body>
<div onmouseover="this.style.background='red'" onmouseout="this.style.background='black';alert('1')" style="width: 400px;height:100px;background: black;">
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width="336" height="76" />
</div>
</body>
</html>
наведите мышку на чёрный прямоугольник, а потом на картинку, при переходе вызовется событие "onmouseout" которое вызовет алерт, но при этом когда вводишь мышкой после этого по картинке, то "onmouseover" срабатывает, и фон красный, когда снова переходишь мышкой из картинки на прямоугольник то опять срабатывает событие оут, вот в чём вопрос, как убрать срабатывания события "onmouseout" при переходе с картинки на родительский элемент? |
Берешь элемент, на который перешел, и проверяешь, есть ли у него в родителях div. Если есть - ничего не делай. Выглядеть в твоем примере это может примерно так:
if( relatedTarget === this || relatedTarget.parentNode === this ) return; |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<body>
<div onmouseover="this.style.background='red'" onmouseout="alert('1');this.style.background='black';" style="width: 400px;height:100px;background: black;">
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width="336" height="76" onmouseover="if( relatedTarget === this || relatedTarget.parentNode === this ) return;"/>
</div>
</body>
</html>
так что-ли? по другому спрошу, а как можно проверить ли принадлежит(находиться) мышь в дочернем элементе? типа в событии родителя написать условие, onmouseout="if(!mouseInChildren()) function()" , ну что то на подобии такого, возможно? или как можно хотя бы примерно реализовать "mouseInChildren()", дайте какой-то намёк )) |
Цитата:
<div id="test" style="width: 400px;height:100px;background: black;">
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width="336" height="76" />
</div>
<script>
/*
Функцию mouseInChildren реализовать можно и нужно (см. ниже как),
потому что она универсальна.
Но в конкретном случае я проверяю только relatedTarget и его родителя,
потому что так быстрее:)
*/
function mouseInChildren(target, relatedTarget){
while( relatedTarget ){
if( relatedTarget === target ) return true;
relatedTarget = relatedTarget.parentNode;
};
return false;
};
var div = document.getElementById("test");
div.onmouseover = function(){
this.style.background = 'red';
};
div.onmouseout = function(event){
event = event || window.event
var relatedTarget = event.relatedTarget || event.toElement;
//if( mouseInChildren(this, relatedTarget) ) return;
if( relatedTarget === this || relatedTarget.parentNode === this) return;
this.style.background='black';
};
</script>
|
| Часовой пояс GMT +3, время: 11:26. |