1

我想在鼠标离开两个元素时触发一个事件。我找到了以下 jsfiddle 这正是我正在寻找的:

http://jsfiddle.net/pFTfm/54/

它使用以下代码:

var count = 0;
$('#d1, #d2').mouseenter(function(){
    count++;
    $('#d3').show();
}).mouseleave(function(){
    count--;
    if (count == 0) { 
        $('#d3').hide();
        $('#d3').css('background-color', 'orange');
    }
});
​

但是,该事件仍然会被触发,正如您通过 div 更改其背景颜色所看到的那样。

我希望仅在鼠标真正离开两个元素时触发事件。

4

3 回答 3

8

怎么样:

var count=0;
$('#d1, #d2').mouseenter(function(){
    count++;
    $('#d3').hide();
}).mouseleave(function(){
    count--;

    setTimeout(function(){
        if (count==0){
                $('#d3').show();
            }
    },50);
});
​

jsFiddle

小超时是为了确保鼠标实际上离开了两个元素,而不是离开一个并进入另一个。

于 2012-12-01T17:03:59.003 回答
5

您无法阻止事件的发生,但您可以检查相关目标(您来自的元素)并检查它是否是其中一个。如果是,只需从事件处理程序返回。

就像是:

var checkRelated = function(e) {
    var id = e.relatedTarget.id;
    return id == 'd1' || id == 'd2';
}

$('#d1, #d2').mouseenter(function(e){
    if (checkRelated(e)) return;
    $('#d3').show();
}).mouseleave(function(e){
    if (checkRelated(e)) return;
    // now we know we actually left both elements
    $('#d3').hide();
});

演示:http: //jsfiddle.net/pFTfm/57/

于 2012-12-01T17:13:06.243 回答
1

另一种变体使用.setTimeout()

var timer;

$('#d1, #d2').hover(function(){
    if( timer ) clearTimeout( timer );
    $('#d3').show();
},
function(){
    timer = setTimeout( function( ) {
        $('#d3').hide().css('background-color', 'orange');
    }, 100 );
});

在这里提琴

于 2012-12-01T18:14:37.357 回答