Ну, причина такого поведения в том, что всплывающие сообщения о событиях mouseover / out, что фактически означает, что всякий раз, когда вы наводите курсор мыши на любой из элементов внутри всплывающего окна, всплывающее окно также получает событие.
Вы можете прочитать больше здесь об этих событиях и здесь о пузырях событий.
У вас есть 3 возможных решения здесь:
Измените события на onmouseenter / отпуска. Вы упомянули, что это не помогло, что звучит довольно странно, поскольку они не должны пузыриться.
Проверьте srcElement относительно from / toElement в событии.
Улучшенная версия проверки McKAMEY будет выглядеть так:
function isReal() {
var evt = window.event;
if (!evt) {
return true;
}
var el;
if (evt.type === "mouseout") {
el = evt.toElement;
} else if (evt.type === "mouseover") {
el = evt.fromElement;
}
if (!el) {
return false;
}
// this will also return true if el == evt.srcElement
return evt.srcElement.contains(el);
}
делает то же самое, только короче.
3. Другой вариант - создать прозрачный, невидимый div прямо под вашим всплывающим окном, которое покрывает область, в которую попадает поле выбора. Я предполагаю, что он выпадает за пределы реальной области всплывающего окна.
Надеюсь, это поможет!