У меня есть, <ul>
который заполняется JavaScript после начальной загрузки страницы. В настоящее время я использую .bind
с mouseover
и mouseout
.
Проект только что обновился до jQuery 1.7, поэтому у меня есть возможность использовать .on
, но я не могу заставить его работать hover
. Можно ли использовать .on
с hover
?
РЕДАКТИРОВАТЬ : элементы, с которыми я связываюсь, загружаются с JavaScript после загрузки документа. Вот почему я использую on
и не только hover
.
mouseenter
иmouseleave
, как предложено calebthebrewer.Ответы:
( Посмотрите на последнее изменение в этом ответе, если вам нужно использовать
.on()
элементы, заполненные JavaScript )Используйте это для элементов, которые не заполнены с использованием JavaScript:
.hover()
имеет свой собственный обработчик: http://api.jquery.com/hover/Если вы хотите сделать несколько вещей, объедините их в
.on()
обработчике так:В соответствии с ответами, приведенными ниже, вы можете использовать
hover
с.on()
, но:Кроме того, нет никаких преимуществ с точки зрения производительности, и это более громоздко, чем просто использование
mouseenter
илиmouseleave
. Ответ, который я предоставил, требует меньше кода и является правильным способом достижения чего-то подобного.РЕДАКТИРОВАТЬ
Прошло много времени с тех пор, как на этот вопрос был дан ответ, и, похоже, он набрал обороты. Приведенный выше код остается в силе, но я хотел бы добавить что-то к своему первоначальному ответу.
Хотя я предпочитаю использовать
mouseenter
иmouseleave
(помогает мне понять, что происходит в коде) с.on()
ним все равно, что написать следующее сhover()
Так как в первоначальном вопросе спрашивалось, как они могут правильно работать
on()
с нимиhover()
, я подумал, что исправлю использование,on()
и не счел необходимым добавлятьhover()
код в то время.РЕДАКТИРОВАТЬ 11 ДЕКАБРЯ 2012 ГОДА
Некоторые новые ответы, представленные ниже, подробно описывают, как
.on()
должно работать, если рассматриваемыйdiv
вопрос заполнен с использованием JavaScript. Например, допустим, вы заполняете событие сdiv
использованием jQuery.load()
, например так:Код выше
.on()
не будет стоять. Вместо этого вы должны немного изменить свой код, например так:Этот код будет работать для элемента, заполненного JavaScript после
.load()
события. Просто измените свой аргумент на соответствующий селектор.источник
.on()
решение работает либо с удалением псевдо- парения, либо с использованием реальных. Мне нравится первый, который вы проиллюстрировали с помощью mouseenter / mouseleave +1 для этогоНи одно из этих решений не помогло мне при наведении указателя мыши на объекты, созданные после загрузки документа в качестве запросов. Я знаю, что этот вопрос старый, но у меня есть решение для тех, кто еще ищет:
Это свяжет функции с селектором, так что объекты с этим селектором, созданным после того, как документ будет готов, по-прежнему смогут вызывать его.
источник
mouseover
иmouseout
событий здесь будет вызывать непрерывный запуск кода, когда пользователь перемещает мышь внутри элемента. Я думаюmouseenter
иmouseleave
более уместно, так как он будет срабатывать только один раз при входе.Я не уверен, как выглядит остальная часть вашего Javascript, поэтому я не смогу определить, есть ли какие-либо помехи. Но
.hover()
прекрасно работает как событие с.on()
.Если вы хотите иметь возможность использовать его события, используйте возвращенный объект из события:
http://jsfiddle.net/hmUPP/2/
источник
$('#id').hover(function(){ //on }, function(){ //off});
.on()
с,hover
когда вы можете так же легко избавиться.on()
и заменить его на.hover()
функцию и получить те же результаты. Разве jQuery не пишет меньше кода?mouseenter
иmouseleave
функционировать с.on()
hover
поддержка событийOn()
была объявлена устаревшей в jQuery 1.8 и удалена в jQuery 1.9.Функция наведения jQuery дает возможность наведения и наведения мыши.
$ (Селектор) .hover (inFunction, outFunction);
Источник: http://www.w3schools.com/jquery/event_hover.asp
источник
Просто зашел в Интернет и почувствовал, что могу внести свой вклад. Я заметил, что приведенный выше код, опубликованный @calethebrewer, может привести к нескольким вызовам через селектор и неожиданному поведению, например:
Эта скрипка http://jsfiddle.net/TWskH/12/ иллюстрирует мою точку зрения. При анимации элементов, таких как плагины, я обнаружил, что эти множественные триггеры приводят к непреднамеренному поведению, которое может привести к тому, что анимация или код будут вызываться больше, чем необходимо.
Мое предложение состоит в том, чтобы просто заменить mouseenter / mouseleave: -
Несмотря на то, что это препятствовало вызову нескольких экземпляров моей анимации, я в конечном итоге пошел с помощью mouseover / mouseleave, так как мне нужно было определить, когда над дочерними элементами родительского элемента находились мыши.
источник
Вы можете использовать
.on()
сhover
тем, что сказано в разделе «Дополнительные примечания»:Это было бы сделать следующее:
РЕДАКТИРОВАТЬ (примечание для пользователей jQuery 1.8+):
источник
mouseenter
иmouseleave
... Я знаю, это не отвечает на первоначальный вопрос OP, но все же, использованиеhover
таким образом, не разумно..hover()
.mouseenter
и ,mouseleave
а не просто заставить его работать сhover
. Если нет никакой реальной причины для использованияhover
по соображениям производительности, зачем использовать его, когда он настоятельно не рекомендуется для нового кода?hover
поддержка событийOn()
была объявлена устаревшей в jQuery 1.8 и удалена в jQuery 1.9.источник
Вы можете указать один или несколько типов событий, разделенных пробелом.
Так
hover
что равняетсяmouseenter mouseleave
.Это мое предположение:
источник
Если вам нужно, чтобы это было условием в другом событии, я решил это следующим образом:
Тогда в другом случае вы можете легко использовать его:
(Я вижу, что некоторые используют
is(':hover')
для решения этой проблемы. Но это (пока) не действительный селектор jQuery и не работает во всех совместимых браузерах)источник
Плагин jQuery hoverIntent http://cherne.net/brian/resources/jquery.hoverIntent.html идет намного дальше, чем наивные подходы, перечисленные здесь. Хотя они, безусловно, работают, они не обязательно ведут себя так, как ожидают пользователи.
Самая веская причина использовать hoverIntent - это тайм-аут функция . Это позволяет вам делать такие вещи, как предотвращение закрытия меню, поскольку пользователь немного перетаскивает свою мышь вправо или влево, прежде чем щелкнуть нужный элемент. Он также предоставляет возможности не активировать парящие события в заграждении и ожидает сфокусированного зависания.
Пример использования:
Дальнейшее объяснение этого можно найти на https://stackoverflow.com/a/1089381/37055.
источник