2011-03-14 43 views
0

我在我的网站上有一个水平下拉菜单。它目前只有两层深度:下拉菜单问题。在某些情况下保持它下降

<ul><li>Option 1 
    <ul><li>Option 1.1 
     <ul> 
      <li>Option 1.1.1</li> 
      <li>Option 1.1.2</li> 
     </ul> 
    </li></ul> 
</li></ul> 

选项1层始终可见。在悬停在选项1上时可以看到1.1,并且在悬停在选项1.1上时可以看到选项1.1.1和1.1.2。

客户说他们喜欢下拉菜单。但是,从选项1.1.1到选项1.1.2,需要再次导航多级菜单,这是他们不喜欢的机制。

我有想法检测用户在哪个选项页上,然后修改类,以便它们始终可见。例如:如果我在选项1.1.1页面上,完整菜单仍然可见,允许轻松访问选项1.1.2

通过JQuery和Javascript从URL中返回选项然后搜索多级菜单可将菜单添加到菜单中,以便以某种方式运行。

我不确定从哪里开始。

我的网址如下结构:

[root]/category.php?alias=option111 
[root]/category.php?alias=option112 

我不知道我将如何通过菜单搜索虽然。你能提供一些帮助吗?

回答

1

首先,您将不得不知道您正在使用哪个别名。您可以使用PHP将其解析为JavaScript,或者您可以检查document.location.href并使用正则表达式对其进行修复。

例如,如果您发现别名是option111,则必须触发菜单项上的鼠标悬停,以便进入该菜单。

$.document.ready(function() { 

    //Fix something that 'alias' is an array and contains the numbers of menuitems that you use in your id structure of the menuitems. 

    alias.each(function() { 
     $('#menuitem'+$(this)).trigger('mouseover'); 
    }); 
}); 

这只是一个你可以使用的概念。我希望你能使用这个想法。

-edit后您的comment-

这可能是给你dropdownmenu ID的这些与他们的层级结构中的地方是有用的。这样你可以看到哪些下拉菜单项应该使用url中的别名打开。这样我们可以循环(我们可以使用while,each或者任何你喜欢的方式)。

var alias = document.location.href.slice(6,0); // getting the alias (ex: 111) 
var i = 0; 
while(i < alias.length) { //for each alias character (menu, submenu, subsubmenu, etc) 
$('#menuitem'+alias.substring(0,i).trigger('mouseover'); //trigger the mouseover for ex #menuitem1, or #menuitem32, or #menuitem152 
i++; //increment i to make the loop finite. 
} 

,或者如果你的鼠标悬停事件显示的时间很短的菜单,你可以使用的 $('#menuitem'+alias.charAt(i)).css('display','block');代替

$('#menuitem'+alias.charAt(i)).trigger('mouseover'); 
+0

这是通过查看我的多层列表并挑选哪些与当前相关的难题。我将如何搜索以添加该触发事件? +1对于我不知道的触发器(我是JQuery的新手) – 2011-03-14 14:59:37

+0

触发器('mouseover')的问题是,如果用户触摸菜单,菜单的任何部分与光标,它跳转和复位。我需要它在整个页面上呆在那里。我认为这与下拉菜单插件冲突。我已经尝试过.addClass()和风格的类,我试着实际设置.css(),但没有一个这似乎影响它。 – 2011-03-14 16:12:43

+0

我明白了,所以当鼠标用来打开菜单的任何部分时,插件会自动隐藏活动菜单项?我不知道这是否有效,但是当打开设置为!important的页面时,您可以尝试为活动菜单项创建新的CSS样式。 Javscript不能轻易覆盖!重要的css语句,但我不知道javascript是否可以设置它们。尝试$('#menuitem'+ alias.charAt(i)).css('display','block!important');我希望它能解决这个问题。 – rsplak 2011-03-14 16:25:17

1

你有没有使用那将是jQuery的菜单下拉考虑UI 1.9(和Github中的already available?)

您需要调整样式以使主菜单保持水平(并始终可见),或者交替处理每个顶级<li>元素作为触发器s单独$.menu()项目挂钩其子<ul>元素。

我已经把一些演示代码在http://jsfiddle.net/tcg2m/12/

它需要一些工作,以找出如何让顶级菜单的水平,而不是垂直的。

+0

我会记住这一点,但我不能将它用于当前项目,因为我现在正在改变菜单太远了。虽然 – 2011-03-15 09:36:45

+0

感谢http://jsfiddle.net/tcg2m/12/演示代码似乎不再工作。是否有修订的演示/代码在哪里? – Wavesailor 2012-11-18 13:21:54

+0

@Wavesailor链接插件链接到使用jsfiddle支持的旧版jQuery UI中没有的函数的最新代码。它现在全部内置于jQuery UI 1.9中。我更新了小提琴,但 - http://jsfiddle.net/alnitak/tcg2m/20/ – Alnitak 2012-11-18 21:18:19