Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   window.location.hash и addClass (https://javascript.ru/forum/dom-window/41898-window-location-hash-i-addclass.html)

Joliat 03.10.2013 13:59

window.location.hash и addClass
 
Добрый день!
Я новичок в JS. Подскажите, где у меня ошибка.
if ( window.location.hash == "#age") { 
	function age() { 
		if ( $('li').hasClass('currentage') ) $('.currentage').removeClass('currentage').addClass('current');
	}
	}
	if ( window.location.hash == "#pr") { 
	function pr() { 
		if ( $('li').hasClass('currentpr') ) $('.currentpr').removeClass('currentpr').addClass('current');
		}
	}
	if ( window.location.hash == "#country") { 
	function country() { 
		if ( $('li').hasClass('currentcountry') ) $('.currentcountry').removeClass('currentcountry').addClass('current');
		}
	}


<body onload = "age(); pr(); country();">


такая конструкция не работает
но одна из частей работает нормально, например:
if ( window.location.hash == "#age") { 
	function age() { 
		if ( $('li').hasClass('currentage') ) $('.currentage').removeClass('currentage').addClass('current');
	}
	}


Где я что упускаю?

Joliat 03.10.2013 14:03

Кстати, и почему не работает вот такая простая конструкция:
if ( window.location.hash == "#age") { 
		$('.currentage').removeClass('currentage').addClass('current');
	}
	if ( window.location.hash == "#pr") { 
		$('.currentpr').removeClass('currentpr').addClass('current');
	}
	if ( window.location.hash == "#country") { 
		$('.currentcountry').removeClass('currentcountry').addClass('current');
	}

BETEPAH 03.10.2013 18:56

Цитата:

Сообщение от Joliat
такая конструкция не работает но одна из частей работает нормально, например:

Спорим, я угадаю, какой класс идет в списке первым? ;)
if ( $('li').hasClass('currentpr') ) $('.currentpr').removeClass('currentpr').addClass('current');
Первый элемент $('li') не имеет такого класса, соответственно в условии получаем false и ничего не происходит.

danik.js 03.10.2013 19:27

1) функции нельзя объявлять внутри условий.
2) Че за китай-код? Вам платят за количество строк?
3) На кой вам onload если у вас под рукой jQuery с его $(document).ready() ?
Почему не так ?:
$(document).ready(function(){
    var hash = location.hash.substring(1);
    if (hash) {
        var className = 'current' + hash;
        $('.' + className).removeClass(className).addClass('current');
    }
});

Вот только к чему все эти танцы с бубном? Какому человеку в здравом уме понадобится сначала генерить currentblabla на сервере, а затем заменять на current в браузере? Попахивает бредом, не говоря уж про кривизну рук.

BETEPAH 03.10.2013 19:39

Цитата:

Сообщение от danik.js
1) функции нельзя объявлять внутри условий.

Ну, вообще-то можно. Только это надо делать вот так
var age = function()

Цитата:

Сообщение от danik.js
Какому человеку в здравом уме понадобится сначала генерить currentblabla на сервере, а затем заменять на current в браузере?

Это может потребоваться для обозначения активного пункта в каком-нить навигационном меню по странице. А сервер в генерации хэша ссылки вообще может не участвовать, для этого достаточно якоря.

danik.js 03.10.2013 20:07

Цитата:

Сообщение от BETEPAH
Это может потребоваться для обозначения активного пункта в каком-нить навигационном меню по странице. А сервер в генерации хэша ссылки вообще может не участвовать, для этого достаточно якоря.

Это понятно, но взгляни на скрипт автора. Он тупо меняет currentcountry на current. Какой в этом смысл?


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