#jquery #hash
#jquery #хэш
Вопрос:
Итак, моя проблема в том, что у меня есть «селекторы», которые показывают вам, в каком меню вы находитесь. Я использую два класса, классы selected
и unselected
.
Когда страница загружается, я загружаюсь на основе хэша в URL, и он загружается нормально (подразумевая, что моя функция для загрузки страницы работает!)
Теперь у меня есть отдельный метод под названием setSelect()
, который в основном удаляет / добавляет CSS в пункты меню на основе переменной, объявленной в начале моего JS-документа.
Итак, вот код (я многое вырезал и сохранил только соответствующие части)
var jlLocation = 1;
function setSelect() {
if(jlLocation==1) {
$('#location1').removeClass('unselected');
$('#location1').addClass('selected');
$('#location2').removeClass('selected');
$('#location2').addClass('unselected');
}
else if(jlLocation==2) {
$('#location1').removeClass('selected');
$('#location1').addClass('unselected');
$('#location2').removeClass('unselected');
$('#location2').addClass('selected');
}
}
$(function(){
// Bind an event to window.onhashchange that, when the hash changes, gets the
// hash and adds the class "selected" to any matching nav link.
$(window).hashchange( function(){
hash = location.hash;
document.title = 'Joy Luck ' ( hash.replace( /^#/, '- ' ) || '' ) ''; // Set the page title based on the hash.
setSelect();
if (hash == "#Home") {
showHome();
}
else if (hash == "#Accommodations") {
showAccommodations();
}
$('#menu a').each(function(){
var that = $(this);
that[ that.attr( 'href' ) == hash ? 'addClass' : 'removeClass' ]( 'selected' );
});
})
$(window).hashchange();
});
Опять же, если я загружаю #home
хэш или #accommodations
эти методы запускаются, но setSelect();
метод не работает. Все методы помещаются перед методом, который загружает хэши, так что это не должно быть проблемой.
Редактировать
Я знаю, setSelect()
что меня не вызывали. Это потому, что независимо от того, где я вызываю это в этом методе, это просто не сработало. Но, чтобы помочь, я вставил его.
Комментарии:
1. Это опечатка, в вашем коде отсутствует } в первой функции для ее закрытия? Также вам действительно нужно повторно использовать селекторы. Не выполняйте $(‘#location1’) несколько раз. Соедините их в цепочку! $(«xxx»).addClass(«x»).removeClass(«y»);
2. Извините, он не выдержал моих вязких методов копирования и вставки. Он существует в моем исходном коде.
3. Переменная
jlLocation
никогда не меняется.4. Это правильно, в этом примере это не меняется. Однако это не проблема, так как даже если это 1, условие сработает. Но проблема в том, что метод этого не делает.
Ответ №1:
Проблема в том, что вы никогда не вызываете setSelect()
функцию (или, по крайней мере, ваш код показывает это)
Комментарии:
1. Это моя ошибка. Я удалил его после того, как он фактически ничего не сделал.