0

ul我有一个 javascript 代码,它使用和li元素制作的子菜单关闭 mwnu 。

打开一个子菜单,如果我在页面的其他区域或菜单之外单击,则必须关闭该子菜单。

此脚本仅适用于 Firefox 和 Chrome,但不适用于 IE。

JS代码:

$(function(){
    $(".item").on("click focusout", function(){
        $(".test").toggleClass("no-display");
    });       


    $(document).on("click", function(e){
        if(!$(".test").hasClass("no-display") && $(e.originalEvent.target).closest(".mega").length === 0) {
            $(".test").addClass("no-display");
        }
    });
});

和 HTML 代码:

<ul class="mega">
    <li>Item1</li>
    <li class='item'>Item2
        <ul class='test no-display'>
            <li>SubItem1</li>
            <li>SubItem2</li>
        </ul>
    </li>
    <li>Item3</li>
</ul>

更好的是,我提供Jsfiddle来查看实际问题

4

4 回答 4

2

这是我认为更简单的一种方法:

$("html").click(function() {
    if(!$(".test").hasClass("no-display")) {
        $(".test").addClass("no-display");
    }
});
$(".test").click(function(event) {
    event.stopPropagation();
});
$(".item").click(function() {
    $(".test").toggleClass("no-display");
});
于 2012-08-24T11:28:56.817 回答
1

也许您可以为此使用stopPropagation()。像这样写:

var box = $('.item');
        var sub = $('.test');

        box.click(function() {
            sub.show(); return false;
        });

        $(document).click(function() {
            sub.hide();
        });

        box.click(function(e) {
            e.stopPropagation();
        });

​</p>

检查更多http://jsfiddle.net/xemhT/2/

于 2012-08-24T11:33:00.533 回答
0

使用以下代码:

$(document).click(function(){
    if( $('.test').is(':visible') ) {
        $('.test').hide();
    }
});
于 2012-08-24T11:19:59.020 回答
0

我会用 BODY 点击监听器试试这个,它在 IE 中对我有用:

jQuery('body').click(function(event) {
    var target = jQuery(event.target);
    // your code
});
于 2012-08-24T11:22:54.563 回答