禁用鼠标悬停事件然后重新启动

时间:2012-08-06 16:32:08

标签: javascript javascript-events jquery

如果鼠标悬停在外,我如何解除绑定或禁用鼠标,然后在其他框淡出时重新启用鼠标。

我尝试了unbind,但似乎它不起作用,它只是禁用整个事情。

我甚至试过了暂停,但这对我没有好处。

感谢任何帮助,谢谢

$("#shopping_basket").mouseover(function() { 
            // set a timeout so that this event will not trigger twice when mouseover from the bottom
            setTimeout(function() {
                /*$("#shopping_basket").unbind(mouseover);*/
                $("#miniBasketDetails").fadeIn(500);
            },500);
            });     
        $("#miniBasketDetails").mouseleave(function() { $("#miniBasketDetails").fadeOut(500); });

2 个答案:

答案 0 :(得分:2)

只需猜一下这样的事情:

$("#shopping_basket").bind('mouseover', function() {
  setTimeout(function() {
    $("#shopping_basket").unbind('mouseover');
    $("#miniBasketDetails").fadeIn(500);
  }, 500);

 //Re-enable as needed: $("#shopping_basket").bind('mouseover', function(){});
});

此代码未经过测试,但应该可以使用。

我认为您的问题是您将mouseover作为变量传递给.unbind(),而不是字符串。这就是“整件事”被禁用的原因,因为JavaScript正在寻找一个名为mouseover的变量,该变量未定义,导致您的代码中断。试试这样:.unbind('mouseover')

答案 1 :(得分:0)

不确定这是否是您正在寻找的algorythm,它是based on answers shown in this question 这是the fiddle and the code

$("#shopping_basket").hover(function() {
    $("#miniBasketDetails").fadeIn(500);
}, function() {
    $("#miniBasketDetails").data('is_over', false);
    setTimeout(function() {
        if (!$('#miniBasketDetails').data('is_over')) {
            //if not hovered over the #miniBasketDetails in 650 miliseconds after mouseleave
            $("#miniBasketDetails").fadeOut(500);
        }
    }, 650);
});

$("#miniBasketDetails").mouseenter(function() {
    $(this).data('is_over', true);
});

$('#miniBasketClose').click(function() {
    $("#miniBasketDetails").fadeOut(500, function() {
        $(this).data('is_over', false);
    });
});

span#miniBasketClose只是一个可选的“关闭按钮”,对于代码的功能不是必需的。它的功能可以替换(如果需要),例如将鼠标悬停在其他一些元素上。