Использование делегата() с hover()?
У меня есть элемент ul с множеством элементов li:
<ul>
<li></li>
...
</ul>
когда пользователь наводит указатель мыши на элемент li, я хотел бы показать некоторые скрытые кнопки на ли, когда они перестанут зависать, снова спрячьте кнопки. Попытка использования делегата:
$("#myList").delegate("li", "hover", function () {
if (iAmHovered()) {
showButtons();
} else {
hideButtons();
}
});
выше вызывается как для hover, так и для "un-hover". Как я могу отличить, если это оставить или войти, хотя?
Кроме того, я получил этот образец из этого вопроса:
.delegate эквивалент существующего метода .hover в jQuery 1.4.2
в котором Ник говорит:
Это зависит от того, что [#myList] не заменяется с помощью AJAX или иначе, так как это происходит там, где находится обработчик событий.
Я заменяю содержимое #myList, но используя:
$("#myList").empty();
это вызовет проблему?
Спасибо
Ответы
Ответ 1
Вам нужно проверить тип события, например:
$("#myList").delegate("li", "hover", function ( event ) {
if (event.type == 'mouseover') {
showButtons();
} else {
hideButtons();
}
});
Поскольку для обоих событий выполняется только один обработчик, мы проверяем, какой из них был запущен, и запускаем соответствующий код.
В отличие от привязки hover
непосредственно к элементу, где он может принимать два обработчика для двух типов событий.
EDIT: Обратите внимание, что с jQuery 1.4.3
тип события, который сообщается при использовании 'hover'
с .delegate()
или .live()
, больше не mouseover/mouseout
(так как он должен быть). Теперь это будет mouseenter/mouseleave
, что кажется просто глупым, поскольку они не пузырящиеся события.
Итак, оператор if()
будет выглядеть так:
if (event.type == 'mouseenter') {
//...
Ответ 2
Вы можете объявить функцию обработчика так, чтобы она обращала внимание на аргумент события, а затем проверяла тип.