javascript - 菜单点击在移动版 Chrome 和 Safari 上不起作用

标签 javascript drop-down-menu menu responsive

当我在移动版 chrome 或 safari 或 chrome dev 移动响应工具中打开它时,点击不起作用。只有当我按住点击菜单时,子菜单才会显示。为什么? 在 Firefox 移动版上,一切正常。

http://webtesty.warszawa.pl/wypnaw2/

(function($, undefined)
{
    var open = [];

    var opts = {
        selector: '.dropdown',
        toggle: 'dropdown-toggle',
        open: 'dropdown-open',
        nest: true
    };

    $(document).on('click.dropdown touchstart.dropdown', function(e)
    {
        // Close the last open dropdown if click is from outside the target dropdown
        if ( open.length && ( ! opts.nest || ! open[ open.length - 1 ].find( e.target ).length ) )
        {
            open.pop().removeClass( opts.open );
        }

        var $this = $(e.target);

        // If target is a dropdown then toggle it...
        if ( $this.hasClass( opts.toggle ) )
        {
            e.preventDefault();

            $this = $this.closest( opts.selector );

            if ( ! $this.hasClass( opts.open ) )
            {
                open.push( $this.addClass( opts.open ) );
            }
            else
            {
                open.pop().removeClass( opts.open );
            }
        }
    });

})(jQuery);
.Row
{
    display: table;
    width: 100%;
    table-layout: fixed;
    border-spacing: 10px;
}
.Column
{
    display: table-cell;
    background-color: red;
}

.dropdown {
    position:relative;
    min-width:100%;
    background:#ccc;
    display: inline-block;
}
    .dropdown a {
        display:block;
        text-decoration:none;
        color:#333;
        padding: 20px;
    }

    /* toggle */
    .dropdown .dropdown-toggle {
        padding:0;
        padding: 20px;
    }

    /* dropdown */
    .dropdown-menu {
        position:absolute;
        top:100%;
        right:0;
        left:0;
        display:none;
        margin:0;
        padding:0;
        list-style-type:none;
        background:#ccc;
    }
        /* options */
        .dropdown-menu .option a {
        }
            .dropdown-menu .option a:hover {
                background-color:#aaa;
            }

    /* open */
    .dropdown-open {
        z-index:400;
    }
        .dropdown-open > .dropdown-menu {
            display:block;
        }
        
@media only screen and (min-width: 600px) {
        .dropdown-menu:hover,
.dropdown-toggle:hover + ul{
    display:block; z-index:999999999999;
}
}

@media only screen and (max-width: 600px) {

body {background:red;}
.Column {
    display: block; margin-bottom:10px;
}
}
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="Row">
    <div class="Column">
      <div id="locale" class="dropdown">
      <a href="#locale" class="dropdown-toggle">Wypozyczalnia</a>
      <ul class="dropdown-menu">
          <li class="option"><a href="#">Wypozyczalnia</a></li>
          <li class="option"><a href="#">Wypozyczalnia</a></li>
          <li class="option"><a href="#">Wypozyczalnia</a></li>
          <li class="option"><a href="#">Wypozyczalnia</a></li>
      </ul>
      </div>
    </div>
    <div class="Column">
      <div id="locale" class="dropdown">
      <a href="#locale" class="dropdown-toggle">Wypozyczalnia</a>
      <ul class="dropdown-menu">
          <li class="option"><a href="#">Wypozyczalnia</a></li>
          <li class="option"><a href="#">Wypozyczalnia</a></li>
          <li class="option"><a href="#">Wypozyczalnia</a></li>
          <li class="option"><a href="#">Wypozyczalnia</a></li>
      </ul>
      </div>
    </div>
    <div class="Column">
        <div id="locale" class="dropdown">
      <a href="#locale" class="dropdown-toggle">Wypozyczalnia</a>
      <ul class="dropdown-menu">
          <li class="option"><a href="#">Wypozyczalnia</a></li>
          <li class="option"><a href="#">Wypozyczalnia</a></li>
          <li class="option"><a href="#">Wypozyczalnia</a></li>
          <li class="option"><a href="#">Wypozyczalnia</a></li>
      </ul>
      </div>
    </div>
</div>

最佳答案

在我看来,某些东西会触发您的事件回调两次。例如,某些浏览器可能会分别触发点击和触摸事件,从而打开和关闭菜单。

我没有时间彻底检查您的代码,但我的假设是,如果您更改事件处理程序的参数,那应该可以正常工作。

尝试从处理的事件中删除 click 并从那里获取它。

$(document).on('touchstart.dropdown', function(e)

显然,完全删除点击处理程序在您的情况下可能无效 用例,因此您可以将其与触摸事件支持检测等混合起来。

关于javascript - 菜单点击在移动版 Chrome 和 Safari 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50664707/

相关文章:

javascript - 在 JavaScript 中操作数据时是否应该避免使用 C# 中的十进制类型

javascript - Angular : dynamic value issue

php - HTML 定义激活的选择选项

jquery - 下拉选择框的高度

javascript - 如何从文件中获取 JSON 数据以显示在 HTML 页面上

javascript - 如何使用 Node.js 和 eclipse 将 mongodb 数据发送到浏览器

javascript - 如何将悬停效果更改为仅针对下拉菜单的 onclick

android - 以编程方式为从 XML 创建的现有菜单创建子菜单

javascript - css 菜单或脚本在 ie 上不起作用

java - 通过在外部单击关闭 JPopupMenu 时如何防止触发其他事件?