【问题标题】:on iphone - jquery to open/close nested nav在 iphone - jquery 打开/关闭嵌套导航
【发布时间】:2012-06-07 18:17:58
【问题描述】:

我正在构建一个顶部有嵌套导航的移动网站。我希望在用户点击其父 li 时弹出子导航。这是我的麻烦:当点击子导航的任何其他内容时,我需要关闭它,包括最初打开它的 li。

我尝试过的:

  • fadeToggle 和其他切换:子导航仅在再次点击父 li 时关闭。
  • hover():根本不会关闭子导航。

我的导航样例:

<ul>
    <li id="open"><a href="#">one</a>
        <nav><ul>...</ul></nav>
    </li>
    <li>...</li>
</ui>

这是我尝试过的悬停 jquery:

$("li#open").hover(
    function (event) { 
    event.preventDefault(); $("nav").show(); },
    function (event) { 
    event.preventDefault(); $("nav").hide(); }
);

我对 jquery 和 javascript 编写自己的函数不够满意,但必须有某种方法来编写一个可以说,除了“nav”之外的任何东西都会隐藏“nav”。任何帮助将不胜感激!

【问题讨论】:

  • 这是仅适用于 iphone(标记为 iphone)还是所有手机?

标签: jquery iphone nav


【解决方案1】:

我会做这样的事情

$("li#open").click(function (event) { 
    // prevent default
    event.preventDefault();
    // if #open has class active, then remove it if not then add it
    if($(this).hasClass("active")) {
        $(this).removeClass("active");
    }
    else {
        $(this).addClass("active");
    }
);

$(document).click(function() {
    // if #open has class active then remove it
});

class active 应该显示菜单,默认情况下菜单不显示。这样,当您添加活动类时,菜单将显示

如果您有多个菜单项,这适用于一个菜单项,那么代码需要稍作更改。如果这仅适用于 iOS,那么您可以使用 touchstart 和 touchend 而不是 click

$("li#open").live('touchstart', function (event) { // function content }

touchstart在你触摸屏幕时触发,当你的手指离开屏幕时触发touchend

【讨论】:

  • 我会试试你的第一种方法。 touchstart 不是我想要的,因为我想操作 2 个不同的点击,而不是一个长点击。
  • @MaryPelletier touchstart 可用于任意数量的选项卡,您只需将其绑定到它们。如果多个选项卡具有相同的类,则将其绑定到该类。您可以随时访问该人已触摸的选项卡,并关闭当前从其他选项卡打开的菜单
  • Huangism - 我说的是点击,而不是标签。我了解 touchstart 和 touchend 的工作原理,但这不是我要寻找的功能。您的第一个建议部分有效 - 第一个条件适用于桌面浏览器,但 (document).click 部分不起作用。在移动 Safari 上,这些都不起作用。
  • @MaryPelletier 然后将 touchstart 绑定到文档
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 2021-09-22
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
相关资源
最近更新 更多