在外部单击IOS设备时关闭Slicknav菜单

时间:2015-04-15 18:57:04

标签: javascript jquery mobile menu focusout

我正在使用Slicknav移动菜单脚本:http://slicknav.com/

它工作得很好,除非我无法弄清楚如何在ios设备上点击菜单之外关闭它。当我在桌面和Android上测试它时,它在外面点击时很好,但是在我的Ipad上它没有工作。这是当前的代码。任何见解?谢谢!

<script src="slicknav.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.menu').slicknav({
label:'',
closeOnClick:true
});
$('.slicknav_menu').focusout(function(event){
$('.menu').slicknav('close');
});
});
</script>


<nav>
<ul class="menu">
<li><a href="">Home</a></li>
<li><a href="">Link1</a></li>
<li><a href="">Link2</a></li>
</ul>
</nav>

3 个答案:

答案 0 :(得分:2)

在我的网站上,右侧菜单使用了slicknav。由于这段代码,我在iOS上点击外面时它很好。示范:http://www.crealisationweb.fr

替换它:

$('.slicknav_menu').focusout(function(event){
    $('.menu').slicknav('close');
});

有了这个:

$("div, html").on("click", function (event) { 
    if(!$(event.target).hasClass(".menu a") && 
    !$(event.target).hasClass("ul.slicknav_nav li a") && 
    !$(event.target).hasClass("slicknav_menutxt") && 
    !$(event.target).hasClass("slicknav_icon") && 
    !$(event.target).hasClass("slicknav_icon-bar") &&
    !$(event.target).hasClass("slicknav_btn")) {   
        $(".menu").slicknav('close'); 
    }
});

答案 1 :(得分:2)

我使用过这样的东西

$(window).on("touchstart", function(e) {
    var container = $("#menu");
if (!container.is(e.target) // if the target of the click isn't the container...
    && container.has(e.target).length === 0) // ... nor a descendant of the container
{
    $('#menu').slicknav('close');
}
});

答案 2 :(得分:0)

我记得创建我的第一个移动网站,这个问题已经耗尽了很多时间。单击时,iOS有:hover状态的已知问题。

阅读here - 它应该可以解决您的问题。