Internet Explorer и <выбор> отмечают проблему

Я столкнулся с проблемой с помощью FileSystemWatcher на сетевых ресурсах. Если Вы находитесь в чистой среде Windows, это не могла бы быть проблема, но я наблюдал долю NFS и так как NFS является не сохраняющим состояние, никогда не было уведомления, когда файл я смотрел измененный.

8
задан Brian 13 August 2009 в 19:48
поделиться

13 ответов

Вы должны быть в состоянии определить, является ли ситуация той, которая вам нужна, просто с помощью значений вне события. Это немного запутано, но, похоже, работает.

В обработчике событий вашего внешнего 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, что позволяет избежать вызова переключателя скрытия.

9
ответ дан 5 December 2019 в 15:25
поделиться

Как насчет повторного отображения div, когда указатель мыши находится над событиями до событий mouseover для s.

Изменить: порядок выполнения наведения указателя мыши на параметр и вывода указателя мыши на div может вызвать проблемы.

0
ответ дан 5 December 2019 в 15:25
поделиться

В событии mouseout для div добавьте тайм-аут для элемента div, который скроет div через 200 миллисекунд или около того.

Затем в событии наведения указателя мыши для div / select и событии щелчка для select очистить тайм-аут, сохраненный в элементе div.

Это дает очень небольшую задержку перед скрытием div, который позволяет события наведения мыши или щелчка, чтобы очистить тайм-аут перед его выполнением. Это некрасиво, но должно работать.

Затем в событии наведения указателя мыши для элемента div / select и событии щелчка для элемента выбора очищается тайм-аут, сохраненный в элементе div.

Это дает очень небольшую задержку перед скрытием div, что позволяет событиям наведения указателя мыши или щелчка мыши на очистить тайм-аут до его выполнения. Это некрасиво, но должно работать.

Затем в событии наведения указателя мыши для элемента div / select и событии щелчка для элемента выбора очищается тайм-аут, сохраненный в элементе div.

Это дает очень небольшую задержку перед скрытием div, что позволяет событиям наведения указателя мыши или щелчка мыши на очистить тайм-аут до его выполнения. Это некрасиво, но должно работать.

0
ответ дан 5 December 2019 в 15:25
поделиться

Я предлагаю установить другой флаг, пока поле выбора находится в фокусе. Не закрывайте div, пока установлен флаг.

2
ответ дан 5 December 2019 в 15:25
поделиться

Вы должны использовать event.stopPropagation () в .

0
ответ дан 5 December 2019 в 15:25
поделиться

Учитывая, что выборки в IE доставляют неудобства, особенно когда речь идет о всей проблеме многоуровневости, когда выделение появляется над div, даже если этого не должно быть, могу я указать вам в направлении Управление кнопками меню YUI. Они выглядят очень красиво, их легко реализовать, и они не вызовут этой проблемы

Вот ссылка: http://developer.yahoo.com/yui/examples/button/btn_example07.html

0
ответ дан 5 December 2019 в 15:25
поделиться

Многие люди, публикующие решения / примеры, похоже, не понимают одного: событие onmouseout на

срабатывает перед событием onmouseover на получает фокус (при наведении курсора мыши), не закрывайте
вообще (clearTimeout).

Также попробуйте поиграть с распространением / всплыванием событий.

0
ответ дан 5 December 2019 в 15:25
поделиться

пробовали ли вы hover вместо эффектов наведения / вывода мыши?

$(".myDiv").hover(function(){
    $(this).show();
}, function {
    $(this).hide();
});
0
ответ дан 5 December 2019 в 15:25
поделиться

вы можете попробовать добавить другое событие наведения указателя мыши специально для списка параметров.

0
ответ дан 5 December 2019 в 15:25
поделиться

вместо того, чтобы использовать mouseout в качестве события для закрытия div, используйте mouseleave, тогда событие будет срабатывать только тогда, когда указатель покидает границу div, а не когда он перемещается на другие элементы внутри это

0
ответ дан 5 December 2019 в 15:25
поделиться

Что ж, причина такого поведения в том, что всплывающее окно событий mouseover / out, что фактически означает, что всякий раз, когда вы наводите курсор на любой из элементов внутри всплывающего окна, всплывающее окно также получает событие.

Вы можете прочитать больше здесь об этих событиях, и здесь о всплытии событий.

У вас есть 3 возможных решения:

  1. Измените события на onmouseenter / leave. Вы упомянули, что это не помогло, что звучит просто странно, поскольку они не должны пузыриться.

  2. Проверьте 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 прямо под вашим всплывающим окном, который охватывает область, в которую опускается поле выбора. Я предполагаю, что он выходит за пределы фактической области всплывающего окна.

Надеюсь, это поможет!

0
ответ дан 5 December 2019 в 15:25
поделиться

Почему на

есть mouseover / mouseout? Почему бы просто не показать
при наведении курсора мыши, а затем установить Я не знаю, сработает ли это, но если
находится сверху тела, тогда
должен оставаться видимым.

0
ответ дан 5 December 2019 в 15:25
поделиться

Как насчет чего-то вроде этого:

        <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();
});

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

0
ответ дан 5 December 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: