У меня есть меню <li>, которое при наведении перемещает панель вниз, содержащую подменю. (исправлено) Теперь мне нужно заполнить это подменю содержимым, которое меняется в зависимости от того, какой из пунктов меню находится под курсором. (исправлено)
последняя проблема: я могу изменить содержимое только в том случае, если вместо .hover используется .click ... - есть ли проблема с использованием 2 x .hover для одного и того же элемента?
Во-первых, исправьте разметку html, правильно используя идентификатор и классы.
Id - это уникальные идентификаторы, их нельзя использовать более одного раза в одном и том же html-документе. Используйте для этого атрибут класса. Пока что замените <div id="subcontent_container"> на <div class="subcontent_container">
Когда это будет сделано, обновите свой вопрос новым HTML-кодом, я обновлю свой ответ инструкциями на следующем шаге.
Ответ 2 · рейтинг 1 · Corey Ballou
Вам было бы лучше использовать onmouseover/onmouseout, так как у вас есть состояние обратного вызова, чтобы скрыть меню, когда пользователь больше не зависает над LI.
// this will only work for hover
// you will need a separate binding on the A tag to make
// the panel stick
$('#navmain li').mouseover(function() {
var id = $(this).attr('id');
var subId = 'sub' + id;
// show the sub menu
$(subId).fadeIn(1, function() {
// slide down top panel
$('#toppanel').slideDown('fast');
});
},
// this callback refers to the onmouseout state
function() {
// hide the top panel
$('#toppanel').slideUp('fast', function() {
// hide content again
$(subId).hide();
});
});
Также, как правило, рекомендуется размещать навигацию второго уровня внутри тега LI в виде вложенного списка, это позволит перенести состояние наведения мыши на вновь отображаемый код панели (поскольку это дочерний элемент LI, поэтому вы все еще технически "наведение мыши" на содержащий блок LI. К сожалению, это потребует некоторого изменения стиля CSS и абсолютного позиционирования на вложенном UL, но, по моему мнению, это стоило бы затраченных усилий.
У него есть дополнительное преимущество, заключающееся в упрощении вашего jQuery и уменьшении количества ненужных тегов.
// this version coupled with the above HTML changes
// will allow the UL panel to remain open until
// you mouse out
$('#navmain li').mouseover(function() {
$(this).find('ul').slideDown('fast');
},
// this callback refers to the onmouseout state
function() {
$(this).find('ul').slideUp('fast');
});
Ответ 3 · рейтинг 1 · Slevin
Я считаю, что при использовании события .hover ваше форматирование должно быть выполнено следующим образом:
function border() {
$('ELEMENT').hover(function () {
$(this).stop().animate({height:"290"},200) },
function () {
$(this).stop().animate({height:"150"},200)
});
};
Используя этот формат, вы должны иметь возможность подключать свои функции и заставлять ховеры работать при наведении и выходе. Я буду следить за этим постом, чтобы увидеть, возникнут ли какие-либо другие вопросы. Надеюсь, это поможет.