代码之家  ›  专栏  ›  技术社区  ›  S16

hoverintent在select元素上触发“out”函数

  •  5
  • S16  · 技术社区  · 15 年前

    下面的代码用于显示和隐藏大型下拉列表。如果将鼠标悬停在具有“DropDown”类的链接上,则会显示“Child”。DropPanel。只要鼠标位于链接或放置面板上,放置面板将保持显示状态。将光标移动到链接或面板以外的任何位置,面板将隐藏。基本的东西。

    在这些大型下拉列表中,有一些表单包含select元素。在火狐中,一切都很好。在IE中(具体来说是8,还没有测试任何其他版本),如果您将鼠标悬停在放置面板中的一个select元素上,hoverintent将激发dropPaneloff()的“out”函数,而放置面板将隐藏。

    我该如何预防?

            // Apply Hover Intent to Menu Panels
            $(".dropDown").hoverIntent({
                sensitivity: 10, 
                interval: 150, 
                over: dropPanelOn, 
                timeout: 150, 
                out: dropPanelOff
            });
    
                // Menu Over function call
                function dropPanelOn() {
                    $('a[rel="dropLink"]', this).addClass('hover');
                    $('.dropPanel', this).slideDown('fast');
                }
    
                // Menu Out function call
                function dropPanelOff() {
                    obj = this;
                    $('.dropPanel', this).slideUp(100, function(){
                        $('a[rel="dropLink"]', obj).removeClass('hover');
                        $('.dropLink span', obj).removeClass('hover');
                    });
                }
    
    2 回复  |  直到 12 年前
        1
  •  6
  •   thejartender    12 年前

    尝试将此添加到代码中:

    $(".dropDown select").mouseout(function(e) {
            e.stopPropagation();
    });
    
        2
  •  0
  •   Will Earp    14 年前

    也许您应该只使用本机悬停事件,也可以添加延迟:

    var time = false;
    $(".dropDown").hover(function () {
       if ($("dropPanel", this).is(":hidden")) $("dropPanel", this).slideDown('fast');
       else window.clearTimeout(timer);
    }, function () {
       var obj = $(this);
       timer = window.setTimeout(function () {obj.slideUp(100);}, 150);
    });