2011-08-24 11 views
1

表现不同期望的行为是:jQuery的下拉菜单中的IE和Webkit

  • 点击父打开下拉菜单
  • 点击任何地方的页面,或在父母,收下拉菜单

我的jQuery代码在Safari浏览器&中工作正常,但IE8中没有。在IE8中,下拉菜单在父母被第一次点击时打开并关闭。第二次单击父级时,下拉菜单保持打开状态。我正在使用jQuery 1.6.2。

这里是jQuery代码(有点怪人我已经从不同的方法拼凑我读):

$(function() { 
/* for keeping track of what's "open" */ 
    var activeClass = 'menu-open', showingDropdown, showingMenu, showingParent; 
    /* hides the current menu */ 
    var hideMenu = function() { 
     if(showingDropdown) { 
      showingDropdown.removeClass(activeClass); 
      showingMenu.fadeOut(500); 
     } 
    }; 

    /* recurse through dropdown menus */ 
    $('.drop').each(function() { 
     /* track elements: menu, parent */ 
     var dropdown = $(this); 
     var menu = dropdown.next('.subnav'), parent = dropdown.parent(); 
     /* function that shows THIS menu */ 
     var showMenu = function() { 
      hideMenu(); 
      showingDropdown = dropdown.addClass('menu-open'); 
      showingMenu = menu.show(); 
      showingParent = parent; 
     }; 
     /* function to show menu when clicked */ 
     dropdown.attr('href','/#dropdown').bind('click',function(e) { 
      if(e) e.stopPropagation(); 
      if(e) e.preventDefault(); 
      if (dropdown.hasClass('menu-open')) { 
       hideMenu(); 
      } else { 
       showMenu(); 
      } 
     }); 
     /* function to show menu when someone tabs to the box */ 
     dropdown.bind('focus',function() { 
      showMenu(); 
     }); 

    }); 
}); 

这将不胜感激,如果任何人都可以给我一个指针,为什么IE会表现出与Webkit & Firefox不同的表现。与我描述的现有解决方案的链接也很棒。请解释,如果你正在跟一个慢的孩子说话,因为jQuery/JavaScript不是我的特长。

回答

0

showMenu();调用焦点(鼠标按下),然后在“点击”(鼠标释放)hideMenu();被调用,这就是为什么如果你再次点击它,它的工作原理,因为它已经集中。但如果你点击它,我敢打赌你会得到相同的行为..我会删除'焦点'代码imo或使“焦点”,所以它不会干扰“点击”

+0

您的第一个建议没有诀窍。我不知道如何做第二件事,你建议('做'专注“,所以它不会干扰”点击“),但这会做。 – Florian