【问题标题】:Mobile menu button 2 clicks to toggle the menu移动菜单按钮 2 单击以切换菜单
【发布时间】:2015-07-05 20:07:53
【问题描述】:

使用:VS 2013,ASP.NET (VB) Webforms。

将 WebForms 网站从 .NET 2.0 升级到 .NET 4.5,并为 Google 支持添加移动友好性。

在右上角创建了一个按钮,如下所示:

<a href="#" onclick="toggleMenuDiv();">
    <img class="headerimg-r" src="/images/MenuBtn6464.png" />
</a>

javascript 看起来像这样:

    function toggleMenuDiv() {
    var menu = document.getElementById('menu');
    if (menu.style.display == 'none') {
        menu.style.display = 'block';
    }
    else {
        menu.style.display = 'none';
    }
}

id 为“menu”的元素如下所示:

<div class="dropdownmenu" id="menu">

但是,要下拉菜单,我需要触摸两次而不是一次。所有菜单链接都可以正常工作,无需多次触摸。

您可以自己看看。在移动设备上点击http://www.pedfast.com 并尝试一下。

我知道我错过了一些简单的东西;有人能指出我正确的方向吗?

谢谢!

【问题讨论】:

  • 你可以使用 jQuery click 和 slideToggle 来代替。

标签: javascript html css


【解决方案1】:

也许menu.style.display 开头不等于none

所以,当你第一次点击菜单时,你会将display 设置为none。第二次displaynone,这就是它在第二次点击时起作用的原因!

我认为您需要检查display 是否不等于block 然后将其设置为block

试试这个:

if (menu.style.display != 'block') {
    menu.style.display = 'block';
}
else {
    menu.style.display = 'none';
}

编辑 看看@Billy Purvis 的回答。如果您想再次hide 菜单,也可以添加.toggle() 而不是.show()

【讨论】:

    【解决方案2】:

    问题是具有属性 id === "menu" 的 div 没有值 display: none; 作为样式属性,所以基本上在第一次单击时,您的代码将分配给该值的元素,然后在第二次点击值display: block

    从链接页面中提取:

    <div class="dropdownmenu" id="menu">
    

    应该是

    <div class="dropdownmenu" id="menu" style="display: none;">
    

    【讨论】:

    • 单独的CSS文件中的样式表默认显示:none;
    【解决方案3】:

    在这里,我创建了一个 jsFiddle 来展示 jQuery 的使用。它更干净、更容易理解,并且只需要单击一下。 如果没有更多代码,我无法重新创建你的,所以我创建了一个示例来显示逻辑,在你的示例中使用逻辑应该很容易。

    $("button").click(function(){
        $(".menu").show();
    });
    

    单击按钮(或标签)后,它将显示菜单。将此 CSS 放在菜单上会隐藏它,直到需要它为止

    .menu {
        display: none;
    }
    

    http://jsfiddle.net/yhf3dfcs/

    【讨论】:

    • 这会很好用,但是,我坚持认为反对票是因为 OP 没有要求不同的解决方案,在这种情况下,没有必要包含整个库jquery 来解决这个问题。 (OP 源没有使用 jquery 或添加了那个标签)
    • 当然,但就保持代码整洁而言,使用较少的实际编写代码不是更好的解决方案。我假设 OP 会在某个时候使用 jQuery。不过,评论是公平的,我觉得没有必要投反对票。 OP 的方式似乎比它可能的更难和更混乱。唉,OP的选择。感谢您的解释。
    • 菜单的 CSS 在样式表中显示为:无;
    • 仅供参考,Unless a tag for a framework or library is also included, a pure JavaScript answer is expected for questions with the javascript tag。这是投票失败的最可能原因。不幸的是,我不能投票,因为这个问题不要求也不包括 jQuery 的标签。 this answer 也是如此。
    猜你喜欢
    • 1970-01-01
    • 2021-08-09
    • 2018-09-23
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多