Bootstrap v2下拉导航不能在移动浏览器上工作
Bootstrap v2 Dropdown Navigation not working on Mobile Browsers
我在移动设备上的Bootstrap菜单下拉菜单上遇到了一个问题(Bootstrap 2)。在这里,下拉按钮也遇到了类似的问题,但是这个问题的答案是Bootstrap中固有的错误,这个错误在更新中得到了解决。我似乎有同样的问题,所以也许这是我的加价?
我有一个带下拉菜单的可折叠导航条,一切都在桌面浏览器上完美运行。然而,在手机上,当你点击下拉菜单时,下拉菜单会打开,但是点击任何下拉链接只会再次将下拉菜单折叠起来——链接无法到达。我尝试过各种引导版本,无法纠正这一点,所以我只能想象这是我的标记。
<header class="navbar">
<div class="navbar-inner">
<div class="container">
<a href="#"><h1>Branding</h1></a>
<button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> Menu </button>
<div class="nav-collapse collapse">
<ul class="nav">
<li><a href="#">Menu Item 1</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Menu Item 2 (Dropdown)<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="#">Dropdown Item 1</a></li>
<li><a href="#">Dropdown Item 2</a></li>
<li><a href="#">Dropdown Item 3</a></li>
<li><a href="#">Dropdown Item 4</a></li>
</ul>
</li>
<li><a href="#">Menu Item 3</a></li>
<li><a href="#">Menu Item 4</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
</header>
下面是复制代码的示例(抱歉,无法发送站点):http://jsfiddle.net/yDjw8/1/
(问题只能在手机上看到/复制-我使用iOS)
任何帮助都将非常感激。
在您的最小化bootstrap.min.js文件中,找到子字符串
"ontouchstart"
并替换为
"disable-ontouchstart"
看看这个类似的问题:
发现此修复2.3.2版本:
<script>
jQuery(document).ready(function($) {
$("li.dropdown a").click(function(e){
$(this).next('ul.dropdown-menu').css("display", "block");
e.stopPropagation();
});
}); </script>
在我建立的两个独立的导航系统上工作。
我使用BootStrap 3.1.1。我尝试了很多答案,下拉菜单在Android设备上工作得很好,但在iOS设备上仍然不起作用。我终于找到了问题的根本原因。
safari在iPhone只支持点击事件的<a>
和<input>
元素。点击iPhone上的事件委派
所以我们需要添加自定义点击委托。下面的代码将解决这个问题。
$('[data-toggle=dropdown]').each(function() {
this.addEventListener('click', function() {}, false);
});
我这样解决了同样的问题:
1。打开你的js/bootstrap-dropdown.js
或它的缩小版。
2。查找以下行或位置:touchstart.dropdown.data-api
3。应该只有4次。像这样:
.on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus)
.on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
.on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
.on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
你应该在第2行和第3行之间插入这行:
.on('touchstart.dropdown.data-api', '.dropdown-menu', function (e) { e.stopPropagation() })
4。您的新闻代码段必须像这样:
.on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus)
.on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
.on('touchstart.dropdown.data-api', '.dropdown-menu', function (e) { e.stopPropagation() })
.on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
.on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
要小心Bootstrap.js的缩小版本…因此,您必须在它的确切位置连接新行。
祝你好运!
我建议下载最新的Bootstrap文件,并用新版本替换服务器上的Bootstrap .js和Bootstrap .min.js。
这为我修复了这个问题。
我从bootstrap git-hub论坛找到了这个解决方案。您只需要在文档的脚本中包含一行代码,如
$("身体")。("touchstart。下拉','。下拉菜单',function (e) {e.s stoppropagation ();});
这是我的工作!!
这个修复是针对Bootstrap 2.3.2的,它是基于@asbanks (https://stackoverflow.com/a/18107103/437019)的答案。
在asbanks的答案之上,这个脚本还传播来自下拉菜单内链接的JS调用,打开的下拉菜单会关闭其他打开的下拉菜单。
$(function() {
return $("a.dropdown-toggle:not(.multiselect)").click(function(e) {
$("ul.dropdown-menu:not(.multiselect-container)").css("display", "none");
$(this).next("ul.dropdown-menu").css("display", "block");
return e.stopPropagation();
});
});
$(document).on('click click.dropdown.data-api', function(e) {
if (!$(e.target).closest('.dropdown, .multiselect-container').length) {
return $("ul.dropdown-menu:not(.multiselect-container)").css("display", "none");
}
});
这似乎没有任何问题。类"open"已经与bootstrap一起存在,并且应该可以工作,但由于某种原因它没有。这段代码迫使它相应地运行。:)
jQuery(document).ready(function($) {
$("li.dropdown").click(function(e){
$(this).toggleClass("open");
});
});
看起来这一切对我来说都是有效的,也许可以尝试用一个新的副本替换你的引导文件,以防你不小心在那里搞砸了任何东西。或者,如果这不起作用,请确保导入了所有内容。您确定正在导入所有CSS和JS文件吗?
当你点击下拉菜单时,它会将open
类添加到你的<li class="dropdown">
中,给你:<li class="dropdown open">
。当您单击下拉菜单上的链接或"菜单项2(下拉)"时,open
类被删除,导致下拉菜单再次折叠。
下面的代码显示了如何阻止click事件的传播,但可能会在其他地方导致问题。另外,我只在下拉菜单中阻止了项目#1的传播。你可以使用jQuery在下拉菜单的所有项上实现这一点。
JS Fiddle: http://jsfiddle.net/yDjw8/2/
我正在使用bootstrap-3.3.1,我在Android phonegap应用程序中遇到同样的问题。
经过几次尝试和错误后,我发现了一个有趣的解决方案:
// clueless hack here!!!! otherwise dropdown menu doesn't work
$('.dropdown-toggle').dropdown('toggle');
$('.dropdown-toggle').dropdown('toggle');
将role="button"
添加到<a href="#" class="dropdown-toggle" data-toggle="dropdown">Menu Item 2 (Dropdown)<b class="caret"></b></a>
为我工作
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Menu Item 2 (Dropdown)<b class="caret"></b></a>
jquery-1.11.2, bootstrap-3.3.2:
$('#yourId').on('hidden.bs.dropdown', function (){
$(this).click(function (event) {
$('.dropdown-toggle').dropdown('toggle');
});
});
我认为如果你这样做,链接将正常工作
$(document).ready(function(){
$('.youClass').click(function(){
var menuItem = '<a class=" " href=" ">Log Out</a>';
$('.anotherClass').append('<li class=".youClass">'+ menuItem +'</li>');
});
});
我必须使用Bootatrap v2.2.1。下拉菜单在台式机上工作,但在移动设备上打开后立即关闭。
我认为问题是旧版本不希望在触摸设备上工作。
所以我的修复基于防止一些触摸事件:
$('a.dropdown-toggle').on('touchstart', function (e) {
e.preventDefault();
});
在极少数情况下,您可能需要添加:
$('a.dropdown-toggle').on('touchmove', function (e) {
e.preventDefault();
});
$('a.dropdown-toggle').on('touchcancel', function (e) {
e.preventDefault();
});
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 如何在不检查HTTP标头的情况下检测移动浏览器
- 在移动浏览器上显示大型文本文件
- 在用户关闭/更改移动浏览器选项卡之前进行检测
- 正在寻找一种跨移动浏览器兼容的方式,通过内置麦克风进行录制
- 导航菜单不适合移动浏览器
- 移动浏览器-如何删除拖动到水平滚动
- 检测移动浏览器名称和版本
- 移动浏览器没有;t支持会话变量
- @媒体查询在桌面浏览器中有效,而在移动浏览器中无效
- 移动浏览器、地理位置和自动填充地址
- 如何在缩放时获取移动浏览器窗口的宽度
- 如何在不检查设备的情况下禁用移动浏览器上的滚动
- Google Maps Javascript API v3 地图显示在桌面浏览器上,但不会显示在移动浏览器上
- 移动浏览器上的无限滚动
- HTML5音频播放器只有在双击后才能在移动浏览器上播放
- 使用jQuery在焦点上选择文本框是't在移动浏览器中工作
- Jquery.Load不适用于android浏览器,但适用于同一设备上的Firefox移动浏览器
- 将JavaScript代码从剪贴板粘贴到移动浏览器中–Android
- 如何以最大的兼容性检测桌面和移动浏览器的宽度