Как обнаружить mouseleave() сразу на двух элементах?

ответ может быть в ванили js или jQuery. Я хочу скрыть div с идентификатором "myDiv", если пользователь больше не зависает над ссылкой с идентификатором" myLink "или промежутком с идентификатором"mySpan". Если у пользователя есть мышь над любым элементом, " myDiv "все равно будет отображаться, но второй пользователь не будет наведен ни на один из двух (не имеет значения, какой элемент пользовательская мышь оставляет первым)" myDiv " исчезнет с лица существования.

другими словами, это то, как я обнаруживаю мышь оставить на одном элементе:

$('#someElement').mouseleave(function() {

   // do something

});

но как сказать (таким образом, что на самом деле будет работать):

$('#someElement').mouseleave() || $('#someOtherElement').mouseleave()) {

   // do something

});

Как обнаружить это?

5 ответов


можно использовать множественный селектор:

$("#someElement, #someOtherElement").mouseleave(function() {
   // Do something.
});

что-то вроде этого должно работать:

var count = 0;
$('#myLink, #mySpan').mouseenter(function(){
    count++;
    $('#myDiv').show();
}).mouseleave(function(){
    count--;
    if (!count) {
        $('#myDiv').hide();
    }
});

jsfiddle


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

<div id="my-container">
 <div class="elem1">Foo</div>
 <div class="elem2">Bar</div>
</div>

$('#my-container').mouseleave(function() { console.log("left"); });

Я думаю, это ваше решение!!!

$(document).ready(function() {
    var someOtherElement = "";
    $("#someElement").hover(function(){
        var someOtherElement = $(this).attr("href");
        $(someOtherElement).show();
    });
    $("#someElement").mouseleave(function(){
        var someOtherElement= $(this).attr("href");
        $(someOtherElement).mouseenter(function(){
        $(someOtherElement).show();
        });
        $(someOtherElement).mouseleave(function(){
        $(someOtherElement).hide();
        });

    });
});

----
html
----
<div id="someElement">
                <ul>
                  <li><a href="#tab1">element1</a></li>
                  <li><a href="#tab2">element2</a></li>
        </ul>       
</div>

<div id="tab1" style="display: none"> TAB1 </div>
<div id="tab2" style="display: none"> TAB1 </div>

вы можете прекрасно использовать setTimeout() дать mouseleave() функция некоторого "допуска", то есть, если вы покидаете divs, но повторно вводите один из них в течение заданного периода времени, он не вызывает .

вот код (добавлен к ответу lonesomeday):

var count = 0;
var tolerance = 500;
$('#d1, #d2').mouseenter(function(){
    count++;
    $('#d3').show();
}).mouseleave(function(){
    count--;
    setTimeout(function () {
        if (!count) {
            $('#d3').hide();
        }
    }, tolerance);
});

http://jsfiddle.net/pFTfm/195/