Подтвердить что ты не робот

Использование делегата() с 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();

это вызовет проблему?

Спасибо

4b9b3361

Ответ 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

Вы можете объявить функцию обработчика так, чтобы она обращала внимание на аргумент события, а затем проверяла тип.