Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Закрытие меню при отведении мыши (https://javascript.ru/forum/misc/24272-zakrytie-menyu-pri-otvedenii-myshi.html)

bohdantheone 23.12.2011 20:45

Закрытие меню при отведении мыши
 
Есть вот такая вот кнопка, которая открывает скрытый div:
<input type="button" class="butprof" value="Меню"> 
 
<div class="menu_body">

<ul class="pro" >
<li><a href="#"> Добавить видео</a></li>
<li><a href="#"> Мой профиль</a></li>
<li><a href="#"> Cообщения (0)</a></li>
<li><a href="#"> Выйти</a></li>
</ul>
</div>


И сам скрипт, который ее открывает
<script type="text/javascript">
$(document).ready(function () { 
$("div.menu_body li:even").addClass("alt"); $('.butprof').click(function () { 
$('div.menu_body').slideToggle('medium'); });
});
</script>


Так вот мне нужно, чтобы при отведении мыши от открытого меню оно закрывалось, делал вот так:
$('ul.pro').mouseout(function () {
$('div.menu_body').hide(); });


Меню сразу закрывается при отведении от 1 пункта меню, а мне нужно от всей области, помогите исправить.

ksa 23.12.2011 21:39

Цитата:

Сообщение от bohdantheone
помогите исправить

Потрудись сделать полный тестовый пример, а не это Лего...

bohdantheone 23.12.2011 21:52

вот
http://jsfiddle.net/bohdantheone/3448m/

ksa 23.12.2011 23:49

bohdantheone, как вариант...

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.menu_body { 
	display:none; 
	padding:5px;
	width:154px; 
	margin-left:2px;
	border: 1px solid;
}
</style>
<script type="text/javascript">
$(document).ready(function () { 
	$("div.menu_body li:even").addClass("alt"); 
	$('.butprof').click(function () { 
		$('div.menu_body').slideToggle('medium'); 
	});
	$('.pro').mouseover(function () {
		$('.menu_body').unbind('mouseout');
		$('.menu_body').mouseout(function () {
			var e=event.target||event.srcElement;
			if ($(e).parents('.menu_body').length==1) {
				return
			};
			$('div.menu_body').hide(); 
			$('.menu_body').unbind('mouseout');
		});
	});
});
</script>
</head>
<body>
<input type="button" class="butprof" value="Меню"> 
<div class="menu_body">
	<ul class="pro" >
		<li><a href="#"> Добавить видео</a></li>
		<li><a href="#"> Мой профиль</a></li>
		<li><a href="#"> Cообщения (0)</a></li>
		<li><a href="#"> Выйти</a></li>
	</ul>
</div>
</body>
</html>

bohdantheone 24.12.2011 00:25

ksa,
спасибо работает, но с багом: когда открывается меню и листать вниз по пунктам и вывести за пределы области мышь, то все норм, но если навести мышь на пункт меню, а потом повести мышей влево или вправо, вот здесь и баг - меню не закрывается и дальше не знает как себя вести, то откроется, то закроется.

ksa 24.12.2011 10:50

Цитата:

Сообщение от bohdantheone
если навести мышь на пункт меню, а потом повести мышей влево или вправо, вот здесь и баг - меню не закрывается и дальше не знает как себя вести, то откроется, то закроется.

Такого "бага" на своём примере (который тут) не наблюдаю... :no:

Pavel M. 24.12.2011 11:02

Цитата:

Сообщение от bohdantheone
Меню сразу закрывается при отведении от 1 пункта меню, а мне нужно от всей области, помогите исправить.

используйте лучше вместо mouseout mouseleave
http://jsfiddle.net/3448m/1/

разницу посмотрите на http://api.jquery.com/mouseleave/
там внизу есть тестовый пример

bohdantheone 24.12.2011 15:04

ksa,
может из-за браузера, Pavel M. спасибо, действительно работает без проблем.

ksa 24.12.2011 16:01

Цитата:

Сообщение от bohdantheone
может из-за браузера

Я смотрел в Опере и ИЕ8...

bohdantheone 24.12.2011 19:43

ksa,
в хроме работает через раз


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