【问题标题】:Disable mouseover event then reanable禁用鼠标悬停事件然后重新启用
【发布时间】:2012-08-03 15:53:19
【问题描述】:

如何在鼠标悬停后解除绑定或禁用鼠标悬停,然后在另一个框淡出时重新启用。

我尝试了解除绑定,但似乎它不起作用,它只是禁用了整个东西。

我什至尝试过超时,但这并没有发挥我的优势。

任何帮助将不胜感激,谢谢

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

【问题讨论】:

    标签: javascript javascript-events jquery


    【解决方案1】:

    只是猜测尝试这样的事情:

    $("#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')

    【讨论】:

    • 非常感谢您的解释和帮助!这就是我想要做的。
    • @EmmanuelCorwinFlossie 如果您觉得有帮助,请点击我的答案旁边的绿色复选标记接受它。
    • 我很乐意,但我的代表太低了:(
    • @EmmanuelCorwinFlossie 您的代表太低,无法投票,但您应该能够立即接受答案:stackoverflow.com/privileges
    • 啊哈不知道,谢谢 spryno724 刚刚做到了,又学到了新东西:)
    【解决方案2】:

    不确定这是否是您正在寻找的算法,它是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 只是一个可选的“关闭按钮”,不是代码功能所必需的。它的功能可以被替换(如果需要),例如也可以将鼠标悬停在其他一些元素上。

    【讨论】:

    • 您好,感谢您的回复,之前的回答我实际上已经建立了一个关闭按钮,但是感谢您的回答,这是一个很好的解决方案。
    猜你喜欢
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多