Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.09.2014, 00:38
Интересующийся
Отправить личное сообщение для faecker Посмотреть профиль Найти все сообщения от faecker
 
Регистрация: 05.05.2014
Сообщений: 16

Выделение активного пункта меню при ajax запросе
Проблема.
Страница состоит из двух частей, левой и правой.
При первоначальной загрузке страницы в левую выгружается основное меню из бд:
Пункт1 a href="#?$number1"
Пункт2 a href="#?$number2"
Пункт3 a href="#?$number3"

По этим ссылкам в правую часть страницы подгружается соответствующий контент ajax get запросом. Все работает быстро и хорошо, без перезагрузки страницы.

Но когда решил подсветить соответствующие пункты меню в зависимости от загруженного контента - ничего не получается.
Для выделения пунктов меню использую классический код:
$(function(){
$('.a').each(function()
{
var location = window.location.href;
var link = this.href;
if (location == link)
$(this).addClass('active');
});
});

Функция работает, но странным образом, с опозданием на один шаг.
То есть кликаем на пункт меню, в адрес строке значение меняется на
site.ru/handler.php#?id=100, при этом с пунктом меню, который отвечает за id=100 ничего не происходит. Контент по ajax успешно загружается.
И теперь, если обновить страницу с адресом site.ru/handler.php#?id=100, то пункт меню наконец-то загорается нужным цветом.

Подскажите, кто разбирается.
Эта проблема вообще решаемая? Или при использовании ajax загрузки выделение пунктов меню в принципе невозможно?
Ответить с цитированием
  #2 (permalink)  
Старый 04.09.2014, 00:54
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

используйте кнопки для оформления кода
function activeMenu() {
    // Здесь стоит улучшикть класс для выборки
    // вместо 'a' к примеру '#menu a'
    var win_href = window.location.href;
    $('a').each(function () {
      if (win_href == this.href) {
        $(this).addClass('active');
      }
    });
}
    activeMenu();
    // после получения данных аяксом выполнить  activeMenu();

Последний раз редактировалось Vlasenko Fedor, 04.09.2014 в 00:58.
Ответить с цитированием
  #3 (permalink)  
Старый 04.09.2014, 01:16
Интересующийся
Отправить личное сообщение для faecker Посмотреть профиль Найти все сообщения от faecker
 
Регистрация: 05.05.2014
Сообщений: 16

Я так пробовал.
У меня так: на каждом пункте меню ссылка:
<a href="#?id='.$data.' onClick="ajax('.$data.')>редактироват </a>

function ajax(id){
$('#div').load('php/handler.php?id='+id);
***здесь код примерно как у вас в ActiveMenu***
}

При такой конструкции тоже работает с опозданием на шаг в изменении стиля пункта меню.

Не пойму как кнопки для кода использовать. Разберусь!).
Ответить с цитированием
  #4 (permalink)  
Старый 04.09.2014, 01:29
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

function ajax(id){
	$('#div').load('php/handler.php?id='+id, function() {
		// Здесь выполняются действия после получения ответа
		// и нам надо
			activeMenu();
	});
};
Ответить с цитированием
  #5 (permalink)  
Старый 04.09.2014, 08:07
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

У меня пол сайта на ajax (все достаточно унифицировано - загружаются страницы с определенном формате), так вот в загружаемом контенте есть ссыль я ищу собственно пункт меню или так соответствующий этой ссылке. Особенно актуально когда загружается страница не по клику в меню.
Ответить с цитированием
  #6 (permalink)  
Старый 04.09.2014, 18:41
Интересующийся
Отправить личное сообщение для faecker Посмотреть профиль Найти все сообщения от faecker
 
Регистрация: 05.05.2014
Сообщений: 16

to Poznakomlus

Так, как вы написали работает. Спасибо огромное!

Но теперь другая проблема.
Пункт меню, по которому кликают, сразу получает новый стиль. Но при клике на следующий пункт первый не теряет активный стиль. Можно загрузить все пункты по очереди, они получают и сохраняют стиль 'active' и не теряют его до обновления страницы.

Как это поправить?
Ответить с цитированием
  #7 (permalink)  
Старый 04.09.2014, 19:14
Интересующийся
Отправить личное сообщение для faecker Посмотреть профиль Найти все сообщения от faecker
 
Регистрация: 05.05.2014
Сообщений: 16

Активный пункт меню без обновления страницы.
Проблема решилась следующим кодом:
function ajax(id){
	$('#targetdiv').load('php/handler.php?id='+id, function()
		{	
			$('.class').each(function()
			{
				var location = window.location.href;	
				var link = this.href;
				if (location == link)
				{
					$('a').removeClass('active');
					$(this).addClass('active');
				}
			});
		});
}


Эта функция вешается на событие onClick всех пунктов меню.
Вроде все работает.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выподающее меню С подсветкой активного элемента на странице Rorbi Элементы интерфейса 7 05.07.2014 15:30
Выделение при клике на элемент haacki jQuery 2 16.03.2014 14:56
Как реализовать задержку при наведении в меню? Stas-ik Элементы интерфейса 14 20.02.2014 12:21
выделение активного пункта faith80 jQuery 3 04.08.2010 13:03
Меню. При открытии любого пункта сворачивались все остальные Drako Элементы интерфейса 6 13.08.2008 13:56