removeClass无法在iOS v2上运行
removeClass not working on iOS v2
创建此主题后,我认为问题已经解决,但由于某种原因,它在iPad上不起作用。
它应该做什么
单击.menuButton
时Jquery将toggleClass('active')
。在CSS中,.active
将有一个display:block;
。Jquery还将使用$(document).on('click', function() { /* CODE */ });
检查div外部的单击,并从navmenu
中删除类active
,这样它将再次隐藏。
代码版本1
HTML5
<header>
<div class="menuButton">
Menu
</div>
<div class="navmenu">
<ul>
<li><a href="#">Page 1</a></li>
<li><a href="#">Page 1</a></li>
<li><a href="#">Page 1</a></li>
</ul>
</div>
</header>
CSS3
.menuButton {
display:block;
cursor:pointer;
}
.navmenu {
display:none;
}
.navmenu.active {
display:block;
}
Jquery 2.2.1
$(document).ready(function() {
var removeClassVar = true;
$('.menuButton').on('click', function() {
$('.navmenu').toggleClass('active');
removeClassVar = false;
});
$('.navmenu').on('click', function() {
removeClassVar = false;
});
$('html').on('click', function() {
if (removeClassVar == true) {
$('.navmenu').removeClass('active');
}
removeClassVar = true;
});
});
JSFiddle
此代码在Windows(Chrome、IE、Edge、Firfox)、Android 5.1、Android 6.0.1和Android 4.4.2(均使用不同浏览器测试)上运行良好。当在Safari和Chrome中用iPhone 5S(iOS 8.4.1)测试时,这将打开菜单,但不会隐藏它。(无法在iPad或其他版本上测试)。
代码版本2
相同的HTML5和CSS3
Jquery 2.2.1
$(document).ready(function() {
var $ua = navigator.userAgent;
var $event = ($ua.match(/(iPod|iPhone|iPad)/i)) ? "touchstart" : "click";
$(document).on($event, function(ev) {
if ($('.navmenu').hasClass('active')) {
$('.navmenu').toggleClass('active');
}
});
$('.menuButton').on('click', function(e) {
e.stopPropagation();
$('.navmenu').toggleClass('active');
});
});
JSFidelle
这个代码适用于Windows、Android和iPhone,但昨天我发现,在我借来的iPad上(不知道是哪个iOS版本),它会打开菜单,但你不能点击任何链接,因为当你点击任何东西时,菜单都会关闭,不会将你重定向到你想要的页面。
将on('click', function()
更改为on('touchstart', function()
不会改变这种情况。
有人知道如何解决这个问题吗?
代码版本3经过大量的尝试,我找到了一种在菜单按钮上使用.toggleClass('active')
的方法,并添加了一个关闭按钮,点击后将使用.removeClass('active')
。我只需要在body
点击时找到删除类的方法。
也许这对你有用。在这种情况下,只有当单击的元素没有链接(a-element)时,菜单才会切换。
$(document).on($event, function(ev) {
if ( ev.target.nodeName != "A") {
$('.navmenu').removeClass('active');
};
});
$('.menuButton').on('click', function(e) {
e.stopPropagation();
$('.navmenu').toggleClass('active');
});
Fiddle
您可以使用下面提到的代码,我认为它会有所帮助:
$(document).ready(function() {
$(document).mousedown(function(e){
if($(e.target).parents('.navmenu').length==1 || $(e.target).hasClass('navmenu')){
}else if($(e.target).parents('.menuButton').length==1 || $(e.target).hasClass('menuButton')){
$('.navmenu').toggleClass('active');
}else{
$('.navmenu').removeClass('active');
}
});
});
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何根据时间运行不同的脚本
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 将文本框链接到由按钮运行的javascript公式
- 为什么不是't运行此Javascript的Chrome
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何使用JS/nightwatchjs并行运行多个测试
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- removeClass无法在iOS v2上运行
- 我可以从Java在Android (v2.2及以上)上同步运行javascript