Элементы, появляющиеся при наведении, по своей сути недоступны.Вы столкнулись с одной стороной проблемы с вашим кодом, когда трудно сделать его доступным с клавиатуры.Но подумайте о сенсорных экранах, которые не имеют реальной концепции зависания: есть ли способ добраться до вашей кнопки на смартфоне или планшете?
Для более прагматичного ответа, если вам нужно остаться с зависанием, менее хакерскийРешение, чем два уже опубликованных, может быть следующим: использовать события focusin и focusout.См., Например, этот вопрос для объяснений и различий с фокусом / размытием, и этот документ w3school для совместимости с браузером.Вам придется по-разному структурировать свой HTML, например:
<div id="outer">
<div id="hover">
...
</div><!--hover-->
<button>Your button which only appears on hover</utton>
</div><!--outer-->
, а также использовать бит js:
$('#outer').on('focusin', __=>$('#hover').classNames.add('keep-visible'));
$('#outer').on('focusout', __=>$('#hover').classNames.remove('keep-visible'));
с соответствующим классом .keep-visible, который оставитэлемент display: block (я не эксперт по CSS, я позволю вам написать код).
Общее функционирование таково: когда какой-то элемент в #outer
получает фокус, элемент focusinуволен из-за пузырения.В этом случае вы помещаете свой класс .keep-visible, чтобы элемент оставался видимым.Событие focusout вызывается, когда фокус покидает последний элемент в пределах #outer
.В этот момент вы удаляете класс .keep-visible, из-за которого элемент исчезает.
Согласно приведенной выше ссылке, onfocusin / out не являются стандартными, но поддерживаются всеми основными браузерами, включая IE.Firefox является последним, кто внедрил его в 52.0, так что это своего рода стандарт defacto;мы можем разумно ожидать, что он не исчезнет в ближайшее время.