如何在悬停或单击时打开JS菜单

时间:2012-04-26 17:53:24

标签: javascript jquery touch

我有一个JS + CSS菜单,在鼠标悬停时效果很好,但我必须使它也适用于点击触控设备。

菜单是这样的:

<div id="menucontainer">
  <ul id="jsddm">              
    <li class="topmenu"><a href="#">Main Menu</a>
      <ul style="visibility: hidden;">
          <li><a href="http://www.google.com">Google</a></li>
          <li><a href="http://www.apple.com">Apple</a></li>
          <li><a href="http://www.microsoft.com">Microsoft</a></li>
      </ul>
    </li>        
  </ul>
</div>

和JS:

$(document).ready(function () {
    $('#jsddm > li').bind('mouseover', jsddm_open);
    $('#jsddm > li').bind('mouseout', jsddm_timer);

    // this work, but the submenus dont click
    $('.topmenu').bind('click', jsddm_open);
});

尝试了不同的方法但没有成功

这里的工作示例: http://jsfiddle.net/xjuZ4/

2 个答案:

答案 0 :(得分:2)

将点击处理程序放在<a>标记上。通过将点击处理程序置于顶级<li>标记,您可以拦截对子<li>标记的所有点击,因为点击子<li>标记也会点击父{{1}标签。

您需要在<li>标记的点击处理程序中添加e.stopPropagation();,以阻止鼠标悬停。

在触发<a>方法时,您也很可能希望使用JQuery方法.parent()来查找<li>所居住的<a>

使用多个下拉菜单更新了JSFiddle

答案 1 :(得分:0)

在您的javascript中删除$('.topmenu').bind('click', jsddm_open);,因为您调用了标记<a>中的链接。