Проблема с пробелом в Microsoft Edge <select>

В Microsoft Edge существует разрыв между меню <select> и его опциями, когда вы раскрываете меню, например:

Это может привести к проблемам с событием mouseout, поскольку его поведение не соответствует Chrome. Рассмотрим этот минимальный пример:

const menu = document.getElementById('menu');

menu.addEventListener('mouseout', (e) => {
  // The line below fixes the glitch in Firefox, but not Edge
  if (e.relatedTarget === null) return;
  document.body.classList.toggle('red');
});
.red {
  background: red;
}
<select id = "menu">
  <option>One</option>
  <option>Two</option>
  <option>Three</option>
</select>

В Edge и только в Edge, когда вы перемещаете курсор мыши между меню и его расширенными параметрами, вызывается событие mouseout. Как предотвратить такое поведение в Edge?

Могу воспроизвести. Возможно, об этом стоит сообщить.

Carcigenicate 17.04.2024 03:12

Похоже (пока эта ошибка не исправлена) вам нужно найти свойства x и y события и сравнить их с координатами x/y выбранного элемента.

Ruan Mendes 17.04.2024 03:34

@Carcigenicate Похоже, у Microsoft нет системы отслеживания ошибок для Edge. Я отправил отчет, используя пункт меню «Отправить отзыв», но кто знает, будет ли он рассмотрен.

thdoan 17.04.2024 06:19

Не могу проверить это прямо сейчас, но что происходит, когда вы переносите выбор в дополнительный диапазон, а затем вместо этого прослушиваете событие mouseout в этом диапазоне?

CBroe 17.04.2024 09:13

@CBroe, это не сработало.

thdoan 17.04.2024 09:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попробовал предложение CBroe обернуть выбор в диапазон. Мой диапазон выглядит так:

<span id = "wrapper" style = "height:20px; display:inline-block">

Затем я слушаю событие mouseleave на обертке (в этом случае mouseout не будет работать). Это работает отлично. Похоже, что пространство между выбором и списком чуть меньше 20 пикселей и имеет фиксированную высоту. Вы можете попробовать.

Можете ли вы поделиться jsfiddle? У меня все еще не работает: jsfiddle.net/thdoan/kev4Lsha/1

thdoan 17.04.2024 21:13

@thdoan В jsfiddle вам нужно задать высоту 25 пикселей. Обычно, если вы используете независимый HTML-файл, вполне достаточно 20 пикселей. По крайней мере, для меня это работает.

Kendrick Li 18.04.2024 03:58

Спасибо, я заставил его работать, используя большую высоту.

thdoan 19.04.2024 01:01

Другие вопросы по теме