Эта строка неверна - она передает кучу аргументов в функцию $()
.
$('#workShadow', '#playShadow', '#aboutShadow', '#contactShadow').fadeTo( 0, 0.1);
Как отмечается в документации , jQuery не ожидает N аргументов в качестве селектора, а 1:
$('#workShadow, #playShadow, #aboutShadow, #contactShadow').fadeTo( 0, 0.1);
Это распространенная (и хорошая) практика - предоставлять набор объектов, которые должны выполнять что-то общее, или выбирать их умнее, чем просто перечислять все их идентификаторы. Основываясь на вашем текущем HTML, этот селектор получает все тени <div>
s в меню, и он намного короче - вам не придется изменять код, если позже вы добавите новый элемент меню, например:
$('div','#navigationFrame').fadeTo(0, 0.1);
Я также вижу, что у вас есть это:
<li id="work"><a id="work" ...>
Это действительно очень неправильно. Идентификаторы должны быть уникальными в документе. Имея более 1 идентификатора в документе, вы не только нарушаете передовые практики, но и выбор идентификатора в jQuery сходит с ума и не работает должным образом. Как и селектор fadeTo, вы можете изменить код смены теней на более чистый:
$('a','#navigationFrame').hover(function() {
$(this).next('div').fadeTo(200, 0.5);
}, function() {
$(this).next('div').fadeTo(400, 0.1);
});
Я протестировал сайт с этими изменениями, и он работает нормально.
Селекторы в моих примерах используют преимущества context jQuery. Делая это:
$('a','#navigationFrame');
или это:
$('div','#navigationFrame');
Мы говорим jQuery "только дайте мне <a>
(или <div>
) элементы внутри #navigationFrame
.
Это эквивалентно этому:
$('#navigationFrame').find('a');
Это хорошая идея, чтобы воспользоваться этим. Я вижу, что у вас есть тенденция вручную перечислять элементы, которые вы пытаетесь сделать, даже если они все в некотором роде похожи. Попробуйте избавиться от этой привычки и дайте мощным селекторам jQuery получить то, что вы хотите из документа.