Я не ищу действия для вызова при наведении курсора, а вместо этого, чтобы узнать, находится ли элемент в данный момент. Например:
$('#elem').mouseIsOver(); // returns true or false
Есть ли метод jQuery, который выполняет это?
javascript
jquery
Джеймс Скидмор
источник
источник
Ответы:
Оригинальный (и правильный) ответ:
Вы можете использовать
is()
и проверить селектор:hover
.Пример: http://jsfiddle.net/Meligy/2kyaJ/3/
(Это работает только тогда, когда селектор соответствует одному элементу максимум. См. Редактирование 3 для более подробной информации)
,
Редактировать 1 (29 июня 2013 г.): (Применимо только к jQuery 1.9.x, так как он работает с 1.10+, см. Следующее Редактирование 2)
Этот ответ был лучшим решением в то время, когда на вопрос был дан ответ. Этот селектор ': hover' был удален
.hover()
методом удаления в jQuery 1.9.x.Интересно, что недавний ответ "Allicarn" показывает, что можно использовать
:hover
качестве селектора CSS (против Sizzle), когда вы префиксируете его селектором$($(this).selector + ":hover").length > 0
, и, похоже, это работает!Кроме того, hoverIntent плагин упомянутый в другом ответе, также выглядит очень хорошо.
Изменить 2 (21 сентября 2013 г.):
.is(":hover")
работыОсновываясь на другом комментарии, я заметил, что оригинальный способ, которым я разместил
.is(":hover")
, на самом деле все еще работает в jQuery, так что.Работало в jQuery 1.7.x.
Он перестал работать в 1.9.1, когда кто-то сообщил мне об этом, и мы все подумали, что это связано с удалением jQuery
hover
псевдонима для обработки событий в этой версии.Он снова заработал в jQuery 1.10.1 и 2.0.2 (возможно, 2.0.x), что говорит о том, что сбой в 1.9.x был ошибкой или, скорее, не преднамеренным поведением, как мы думали в предыдущем пункте.
Если вы хотите проверить это в определенной версии jQuery, просто откройте пример JSFidlle в начале этого ответа, перейдите к нужной версии jQuery и нажмите «Выполнить». Если цвет меняется при наведении, это работает.
,
Редактировать 3 (9 марта 2014 г.): работает только тогда, когда последовательность jQuery содержит один элемент
Как показывает @Wilmer в комментариях, у него есть скрипка, которая даже не работает с версиями jQuery, с которыми я и другие здесь тестировали ее. Когда я попытался выяснить, что особенного в его деле, я заметил, что он пытается проверить несколько элементов одновременно. Это было бросать
Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover
.Итак, работая со своей скрипкой, это НЕ работает:
В то время как этого делает работу:
Он также работает с последовательностями jQuery, содержащими один элемент, например, если исходный селектор соответствует только одному элементу, или вы вызвали
.first()
результаты и т. Д.Об этом также говорится в моем информационном бюллетене «Советы и ресурсы по JavaScript + Web Dev» .
источник
Syntax Error, unrecognized expression: hover. jquery-1.7.js line 4179
.Использование:
jQuery 1.9+
источник
Это не работает в jQuery 1.9. Сделал этот плагин на основе ответа пользователя 2444818.
http://jsfiddle.net/Wp2v4/1/
источник
Установить флаг при наведении:
Тогда просто проверьте свой флаг.
источник
mouseleave
один элемент, я хочу проверить, вошла ли мышь в другой конкретный элемент.e.fromElement
иe.toElement
. Будет ли это работать для вас?.data()
.Пара обновлений, чтобы добавить после работы над этой темой некоторое время:
Мы использовали hoverIntent https://github.com/briancherne/jquery-hoverIntent, чтобы решить эту проблему для нас. По сути это срабатывает, если движение мыши более преднамеренное. (Стоит отметить, что при нажатии и вводе мышью элемента, и выходе из него, он будет срабатывать - если вы хотите использовать один проход, то конструктор - пустая функция)
источник
Вы можете отфильтровать свой элемент от всех наведенных элементов. Проблемный код:
Сохранить код:
Чтобы вернуть логическое значение:
источник
Принятый ответ не работал для меня в JQuery 2.x,
.is(":hover")
возвращает false при каждом вызове.Я закончил с довольно простым решением, которое работает:
источник
Расширяя ответ @ Мохамеда. Вы могли бы использовать небольшую инкапсуляцию
Как это:
Используйте это как:
Разветвленная скрипка: http://jsfiddle.net/cgWdF/1/
источник
Мне нравится первый ответ, но для меня это странно. При попытке проверить сразу после загрузки страницы для мыши, я должен поставить по крайней мере 500 миллисекунд задержки для его работы:
http://codepen.io/molokoloco/pen/Grvkx/
источник
Установка флага для ответа кинакуты кажется разумной, вы можете поместить слушателя в тело, чтобы вы могли проверить, находится ли какой-либо элемент в определенный момент.
Тем не менее, как вы хотите иметь дело с дочерними узлами? Возможно, вам следует проверить, является ли элемент предком текущего элемента наведения.
источник