Я столкнулся с проблемой с помощью FileSystemWatcher
на сетевых ресурсах. Если Вы находитесь в чистой среде Windows, это не могла бы быть проблема, но я наблюдал долю NFS и так как NFS является не сохраняющим состояние, никогда не было уведомления, когда файл я смотрел измененный.
Вы должны быть в состоянии определить, является ли ситуация той, которая вам нужна, просто с помощью значений вне события. Это немного запутано, но, похоже, работает.
В обработчике событий вашего внешнего div
сделайте что-то вроде этого:
<div onmouseover="if (isReal()) { toggle(); }"
onmouseout="if (isReal()) { toggle(); }">
</div>
Затем реализуйте метод isReal
:
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;
}
while (el) {
if (el === evt.srcElement) {
return false;
}
el = el.parentNode;
}
return true;
}
В основном метод isReal
просто определяет, произошло ли событие изнутри div. Если да, то он возвращает false, что позволяет избежать вызова переключателя скрытия.
Как насчет повторного отображения div, когда указатель мыши находится над событиями
до событий mouseover
для
s.
Изменить: порядок выполнения наведения указателя мыши на параметр и вывода указателя мыши на div может вызвать проблемы.
В событии mouseout для div добавьте тайм-аут для элемента div, который скроет div через 200 миллисекунд или около того.
Затем в событии наведения указателя мыши для div / select и событии щелчка для select очистить тайм-аут, сохраненный в элементе div.
Это дает очень небольшую задержку перед скрытием div, который позволяет события наведения мыши или щелчка, чтобы очистить тайм-аут перед его выполнением. Это некрасиво, но должно работать.
Затем в событии наведения указателя мыши для элемента div / select и событии щелчка для элемента выбора очищается тайм-аут, сохраненный в элементе div.
Это дает очень небольшую задержку перед скрытием div, что позволяет событиям наведения указателя мыши или щелчка мыши на очистить тайм-аут до его выполнения. Это некрасиво, но должно работать.
Затем в событии наведения указателя мыши для элемента div / select и событии щелчка для элемента выбора очищается тайм-аут, сохраненный в элементе div.
Это дает очень небольшую задержку перед скрытием div, что позволяет событиям наведения указателя мыши или щелчка мыши на очистить тайм-аут до его выполнения. Это некрасиво, но должно работать.
Я предлагаю установить другой флаг, пока поле выбора находится в фокусе. Не закрывайте div, пока установлен флаг.
Вы должны использовать event.stopPropagation ()
в
или cancelBubble ()
в Сам элемент
.
Учитывая, что выборки в IE доставляют неудобства, особенно когда речь идет о всей проблеме многоуровневости, когда выделение появляется над div, даже если этого не должно быть, могу я указать вам в направлении Управление кнопками меню YUI. Они выглядят очень красиво, их легко реализовать, и они не вызовут этой проблемы
Вот ссылка: http://developer.yahoo.com/yui/examples/button/btn_example07.html
Многие люди, публикующие решения / примеры, похоже, не понимают одного: событие onmouseout на Когда Также попробуйте поиграть с распространением / всплыванием событий.
.
получает фокус (при наведении курсора мыши), не закрывайте
пробовали ли вы hover
вместо эффектов наведения / вывода мыши?
$(".myDiv").hover(function(){
$(this).show();
}, function {
$(this).hide();
});
вы можете попробовать добавить другое событие наведения указателя мыши специально для списка параметров.
вместо того, чтобы использовать mouseout в качестве события для закрытия div, используйте mouseleave, тогда событие будет срабатывать только тогда, когда указатель покидает границу div, а не когда он перемещается на другие элементы внутри это
Что ж, причина такого поведения в том, что всплывающее окно событий mouseover / out, что фактически означает, что всякий раз, когда вы наводите курсор на любой из элементов внутри всплывающего окна, всплывающее окно также получает событие.
Вы можете прочитать больше здесь об этих событиях, и здесь о всплытии событий.
У вас есть 3 возможных решения:
Измените события на onmouseenter / leave. Вы упомянули, что это не помогло, что звучит просто странно, поскольку они не должны пузыриться.
Проверьте 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 прямо под вашим всплывающим окном, который охватывает область, в которую опускается поле выбора. Я предполагаю, что он выходит за пределы фактической области всплывающего окна.
Надеюсь, это поможет!
Почему на Как насчет чего-то вроде этого: Основная идея состоит в том, что вы показываете элемент контейнера, когда наводите курсор на триггер, а когда вы покидаете контейнер, вы скрываете его. Вам нужно будет расположить контейнер так, чтобы он обрезал триггерный элемент, иначе он сразу же скроется.
Я не знаю, сработает ли это, но если
<div id="trigger">
Hover over me!
</div>
<div class="container">
<select>
<option>Blah</option>
<option>Blah</option>
</select>
</div>
$("#trigger").mouseover(function(){
$('.container).show();
});
$(".container").mouseleave(function(){
$(this).hide();
});
Похожие вопросы: