Броский jQuery mouseleave поведение

У меня есть подобный меню выпадающий контейнер, который скрывается через привязку "mouseleave" события.

<div id="container">
<select>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
</select>
</div>

Проблема, которую я имею, состоит в том, когда дочерние элементы моего контейнера содержат ИЗБРАННЫЙ объект, где ОПЦИИ ВЫБОРА физически расширяются вне границ контейнера. Следовательно, парение над ОПЦИЯМИ за пределами границ инициировало "mouseleave" событие, чтобы запустить и закрыть мое выпадающее. ВЫБОР является ребенком контейнера, так в этом случае я ожидал бы, что mouseleave событие распознает это.

6
задан David Berger 19 January 2010 в 20:45
поделиться

3 ответа

Возможно, когда раскрывающийся список расширяется, вы можете установить флаг. Очистить флаг, когда выбран элемент. Когда возникает MouseLeave, не скрывайте меню, если флаг не понятен.

Я всегда нервничаю по поводу взлома событий UI к этой степени, хотя, поскольку, вероятно, в конечном итоге вы покинете немного браузера где-то в совершенно непригодном состоянии.

1
ответ дан 9 December 2019 в 20:43
поделиться

Большинство рендеров (все кроме Gecko, я думаю) реализуют открытые меню. Это очень маловероятно, что вы сможете добиться желаемого эффекта во всех основных браузерах ...

Редактировать: ... но, возможно, так. Это работает для меня в Safari и Firefox. Я не могу проверить в IE прямо сейчас, но придайте ему выстрел:

var timer;
$('#container').mouseleave(function(e) {
    if($(e.target).parents('#container').length) {
        return;
    }
    timer = setTimeout(function() {
        $('#container select').blur();
    }, 50);
}).mouseenter(function(e) {
    if(timer) {
        clearTimeout(timer);
    }
});

Отредактируйте 2: На самом деле сафари не огонь MouseLeave (или . ) вообще, когда