Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Реализация выпадающего меню (https://javascript.ru/forum/dom-window/56806-realizaciya-vypadayushhego-menyu.html)

waterfly 05.07.2015 08:02

Реализация выпадающего меню
 
Добрый день. Столкнулся с проблемой при реализации выпадающего меню.
Суть проблемы такова. При наведении на родительский пункт меню, по средствам CSS, раскрывается подменю. А при наведении курсора на ссылки в подменю, начинают подтягиваться материалы (ajax) в div в этом же подменю. Как реализовать загрузку материалов в первый пункт подменю уже при наведении курсора на родительский пункт меню.

$(".js-dropnav-active li.dropnav-menu__item").hover(function(){
	$(".js-dropnav-active li.dropnav-menu__item").removeClass("dropnav-menu__active");
    $(this).addClass("dropnav-menu__active");
	var link = $(this).attr('id');
	var data = 'data='+link;
	$.ajax({
		url: 'components/drop-menu/items.php',
		type: 'POST',
		data: data,
		dataType: 'html',
		success: function(result){
			$("#ajax-"+link).html(result);
		},
		beforeSend: function(){
			var imgProc = '<div class="loading"></div>';
			$("#ajax-"+link).html(imgProc);
		}
	});
	return false;
});
});

<ul class="nav-bar">
<li class="nav-bar__item dropnav js-dropnav">
<a href="#">Родительский пункт меню</a>

<ul class="dropnav-menu">
<li id="pc" class="dropnav-menu__item dropnav-menu__active">
<a href="#">Первый пункт подменю</a>
<ul class="dropnav-submenu">
<div id="ajax-pc"></div>
</ul>
</li>

<li id="pr" class="dropnav-menu__item ">
<a href="#">Второй пункт подменю</a>
<ul class="dropnav-submenu">
<div id="ajax-pr"></div>
</ul>
</li>

</ul>

</li>
  </ul>

рони 05.07.2015 10:28

waterfly,
вариант добавить
$(".js-dropnav-active .nav-bar__item").mouseenter(function() {
    $("li.dropnav-menu__item:first", this).mouseenter();
})

waterfly 05.07.2015 11:06

Сделал по Вашему совету
$(document).ready(function(){

$(".js-dropnav-active li.dropnav-menu__item").hover(function(){
    $("li.dropnav-menu__item:first", this).mouseenter();
	$(".js-dropnav-active li.dropnav-menu__item").removeClass("dropnav-menu__active");
    $(this).addClass("dropnav-menu__active");
	
	var link = $(this).attr('id');
	var data = 'data='+link;
	$.ajax({
		url: 'components/drop-menu/items.php',
		type: 'POST',
		data: data,
		dataType: 'html',
		success: function(result){
			$("#games-"+link).html(result);
		},
		beforeSend: function(){
			var imgProc = '<div class="loading"></div>';
			$("#games-"+link).html(imgProc);
		}
	});
	return false;
});

});


Теперь получаю такой эфект пошагово:
1. При наведении на родителя запрос не передается.
2. При наведении на первый пункт меню запрос уходит/приходит.
3. Возвращаю курсор на родителя - запрос уходит/приходит.

рони 05.07.2015 11:27

waterfly,
;) добавить а не вставить
$(function() {
         $(".js-dropnav-active li.dropnav-menu__item").hover(function(event) {
             $(".js-dropnav-active li.dropnav-menu__item").removeClass("dropnav-menu__active");
             $(this).addClass("dropnav-menu__active");
             var link = $(this).attr('id');
             var data = 'data=' + link;
             $.ajax({
                 url: 'components/drop-menu/items.php',
                 type: 'POST',
                 data: data,
                 dataType: 'html',
                 success: function(result) {
                     $("#ajax-" + link).html(result);
                 },
                 beforeSend: function() {
                     var imgProc = '<div class="loading"></div>';
                     $("#ajax-" + link).html(imgProc);
                 }
             });
             return false;
         });
         $(".js-dropnav-active .nav-bar__item").mouseenter(function() {
             $("li.dropnav-menu__item:first", this).mouseenter();
         })

     });

waterfly 05.07.2015 12:05

Чем дальше, тем запутанее)
теперь...
1. Родитель - раскрывается меню. (запроса - нет)
2. Подпункт №1 - уходит один запрос/ответ.
3. Подпункт №2 - уходят два запроса/ответа ( подпункта №2 и №3 ).
3. Подпункт №3 - уходят два запроса/ответа ( подпункта №3 и №4 ).
5. Возвращаемся на родителя уходит запрос/ответ №1.

рони 05.07.2015 12:31

waterfly,
может вам ограничение сделать - посылать только 1 запрос а не при каждом наведении.

waterfly 05.07.2015 12:40

Цитата:

Сообщение от рони (Сообщение 377682)
waterfly,
может вам ограничение сделать - посылать только 1 запрос а не при каждом наведении.

Уже думал над этим но мои знания js пока не позволяют а если и позволят будет две страницы кода.:)
Не решает проблемы с родителем.


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