Mouseout на указанных div и оставить исходный div открытым

Я пытаюсь сделать это на простом английском языке: у меня есть открытый div из события mouseover, когда я вынимаю мышь из div, он закрывается при выходе мыши, отлично. Что мне нужно, так это то, что когда я убираю мышь, если я перехожу к div с классом x или классом y, openDiv не закрывается, любое отключение мыши на любом другом div, кроме класса x или класса y, приведет к закрытию openDiv.

Вот что у меня есть до сих пор, но это не работает:

$("#openDiv").mouseout(function () {
    var $c = $(e.target); //div where mouse is
    if ($c.is('div.x') || ('div.y')) //if div where mouse is has class x or y
    {
        $("#openDiv").show(); //show or keep open from the mouseover event
    } else {
        $("#openDiv").hide(); //hide openDiv if mouse is anywhere outside openDiv or div with class x or y
    }
});

ОБНОВЛЕНИЕ: мне нужна дополнительная помощь, чтобы выбрать рабочий ответ! jsfiddle.net/bUzPG/8 При наведении курсора на класс x, y или z он остается открытым, при наведении курсора на x или z openDiv становится розовым, но при наведении курсора за пределами openDiv он также становится розовым, тогда как он должен стать серым и скрыть его. Любая идея, как заставить его стать серым и спрятаться?


person Wonka    schedule 27.06.2011    source источник
comment
вам не нужен оператор or для вашего .is(). Используйте запятую. .is('div.x, div.y')   -  person mrtsherman    schedule 27.06.2011
comment
Основываясь на ответе Нила, я не думаю, что это сработает. Проверьте его скрипку. В основном mouseout of openDiv никогда не вернет x или y (если только они не назначены самому openDiv).   -  person mrtsherman    schedule 28.06.2011


Ответы (2)


Почему бы вам просто не сохранить свою простую логику наведения, как она есть (скрыть при выводе мыши), а затем просто повторно показать ее, когда мышь находится над X или Y div.

$('#openDiv').mouseout(function() {
    $(this).hide();
});

$('div.x').mousein(function() {
    $('#openDiv').show();
});

Если вы сделаете свой селектор $('div.x') идентификатором или, по крайней мере, контекстом, который не является всей DOM, держу пари, что "мерцание" скрывается, а затем показывается снова, даже не заметно.

person Adam Terlson    schedule 27.06.2011

person    schedule
comment
$(e.target), похоже, не делает того, что, по его мнению, делает. По крайней мере для меня в jsfiddle e ничего нет - person mrtsherman; 27.06.2011
comment
Я думаю, что это самый близкий ответ, но я не могу заставить его делать то, что он хочет. См. скрипку - jsfiddle.net/bUzPG - person mrtsherman; 27.06.2011
comment
Пожалуйста, проверьте эту скрипку: jsfiddle.net/bUzPG/8 Наведение курсора на класс x, y или z держит его открытым, наведение курсора на x или z делает openDiv розовым, но наведение курсора за пределы openDiv также делает его розовым, когда он должен стать серым и скрыть его. Любая идея, как заставить его стать серым и спрятаться? - person Wonka; 28.06.2011