iPad上的Bootstrap 3下拉菜单不起作用

Posted

技术标签:

【中文标题】iPad上的Bootstrap 3下拉菜单不起作用【英文标题】:Bootstrap 3 Dropdown on iPad not working 【发布时间】:2014-01-24 11:21:13 【问题描述】:

我有一个简单的 Bootstrap 3 下拉菜单,它在我测试过的所有浏览器(Chrome、FF、IE、android 上的 Chrome)中都可以使用,但它在 iPad 上的 Safari 或 Chrome 中不起作用(ios 7.04)。

我认为这是 ontouchstart 的问题,正如其他一些处理 Bootstrap 2 的帖子中所建议的那样,但我已经尝试使用本地文件并没有成功: Bootstrap Collapsed Menu Links Not Working on Mobile Devices

我也不想要一个必须修改原始 javascript 文件的解决方案,因为我们目前正在从 CDN 中提取该文件。

我在这里创建了一个简单的 sn-p 来测试: https://www.bootply.com/Bdzlt3G36C

这是 bootply 中的原始代码,以防将来链接失效:

<div class="col-sm-5 col-offset-2 top-buffer">
  <div class="dropdown">
      <a class="dropdown-toggle" id="ddAction" data-toggle="dropdown">
        Action
    </a>
    <ul class=" dropdown-menu" =""="" role="menu" aria-labelledby="ddaction">
      <li role="presentation"><a class="dropdown-toggle" id="ddAction" data-toggle="dropdown>
        Action
    </a>
    <ul class=" dropdown-menu"="" role="menu" aria-labelledby="ddaction">
        </a><a role="menuitem" tabindex="-1" href="http://www.google.com">Open Google</a>
      </li>

  </ul></div>
</div>

【问题讨论】:

这是个好问题。它不应该被关闭:它可以被复制而且几乎不是一个错字。这是各种帖子的棘手问题,但代码是一个简洁的例子,问题包括他已经尝试过的东西,答案涵盖了几种可能的解决方案。 【参考方案1】:

引导目标切换在 iPhone/iPad WebKit 上对我不起作用。单击下拉容器时,我最终手动切换了显示类

  $scope.showDropdown = function(dropdownManuId) 
    var element = document.getElementById(dropdownManuId);
    if( element.classList.contains("show") ) 
      element.classList.remove("show");
     else 
      element.classList.add("show");
      element.focus();
      element.scrollIntoView();
    
  ;

【讨论】:

【参考方案2】:

我们在 iOS 上测试的 safari 版本不能正确解释 z-index 初始值。增加下拉菜单上的 z-index。而不是单击该项目,它被隐藏并且菜单关闭。为了让 Safari 正常工作,我们需要覆盖 bootstrap z-index: initial。

.dropdown-menu 
  z-index: 25000 !important;

【讨论】:

【参考方案3】:

我刚刚遇到了这个问题 - 在 iPad mini 2 上没有打开 Bootstrap 3 导航栏下拉菜单(但在 iPhone 7 和各种台式机/笔记本电脑上工作)。直接在 iPad 上调试后,我发现问题是在 js 函数中使用 'let' 而不是 'var'。一旦我将 'let's 切换到 'var',一切都很好。只是想在此处添加它,以防它(或删除类似的过时功能)被证明也是对其他人的修复!

【讨论】:

【参考方案4】:

您还可以为您的标签添加一个名为 clickable 的类。这是一个引导类。它设置 css 光标:指针。

<a class="clickable"></a>

【讨论】:

【参考方案5】:

如果你不想使用&lt;a&gt;标签,或者添加多余的href属性,你可以将cursor:pointer css应用于元素,它会起作用

【讨论】:

这完全没有意义,但它解决了问题.. iOS 调试很有趣!充满惊喜:) 是的.. 我简直不敢相信这解决了我的问题。浏览器太疯狂了。 很奇怪——但这也解决了我在第三方 Wordpress 主题上的引导菜单问题,只需添加 'cusor:pointer' 就可以让 iPhone 响应单击汉堡菜单某些原因。谢谢马克!【参考方案6】:

我想通了。我的锚标记中缺少 href="#" 。它在其他浏览器中运行良好,但在 IOS 上的 chrome 或 safari 中运行良好。现在工作正常。这是任何有兴趣的人的最终代码:

  <div class="dropdown">
      <a class="dropdown-toggle" id="ddAction" data-toggle="dropdown" href="#">
        Action
    </a>
    <ul class="dropdown-menu" role="menu" aria-labelledby="ddaction">
      <li role="presentation">
        <a role="menuitem" tabindex="-1" href="http://www.google.com">Open Google</a>
      </li>
    </ul>
  </div>

这里有一个工作示例: http://www.bootply.com/104147

【讨论】:

顺便说一下,我添加了一些按钮类 (btn btn-sm) - 对我有用(而且我不必使用具有潜在副作用的链接,例如滚动) 这节省了一天的时间。我看到很多例子都省略了 href="#" 并且延续到了最新的项目中。感谢发帖! 这是一个救命稻草,就像本教程从未有过 href 的 @ChristopherStevens 一样 这也是 iPhoneX/Safari 11 的 Bootstrap4 中的一个问题。添加href="#" 仍然有效! 我发现有 href="" 就足够了,尽管我的 &lt;a&gt; 中有 angularjs ng-clicks

以上是关于iPad上的Bootstrap 3下拉菜单不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 3下拉菜单中心对齐不起作用

为啥 Bootstrap 3 导航栏下拉菜单在 IE8 中不起作用?

Bootstrap 下拉菜单在 wordpress 上不起作用

Bootstrap v2 下拉导航在移动浏览器上不起作用

Bootstrap 4下拉菜单不起作用?

Bootstrap 下拉菜单在 Android 上不起作用