我的代码在这里。

    $(document).ready(function() {
        loadMainMenu();
        lessMenu();
    });
    function loadMainMenu() {
        $.getJSON('./inc/main_menu.json', function(data) {
        var html = '';
        html += '<ul>';

        $.each(data, function(entryIndex, entry) {
            if(entry.permission.indexOf(permission) >= 0){
                if(entry.sub && entry.sub.length > 0) {
                    html += '<li class="child nav_box nav_box_padding-all nav_box1';

                    // 현재 페이지 해당 카테고리 클래스 추가 임시 코드
                    if(recentPage == entry.name){
                        html += ' recent';
                    }else if(entry.name == "마이페이지"){
                        html += ' mypage';
                    }
                    html += '"><a class="nav_box_label" href=' + entry.link + ' title=' + entry.permission  + '>' + entry.name + '</a><span class="less">▼</span><span class="more">▲</span><ul>';
                    $.each(entry.sub, function(key, val) {
                        html += '<li><a href=' + val.link + ' title=' + val.permission  + '>' + val.name + '</a></li>';
                    });
                    html += '</ul></li>';
                } else {
                    html += '<li><a href=' + entry.link + ' title=' + entry.permission  + '>' + entry.name + '</a></li>';
                }
            }
        });

        html += '</ul>';
        $("nav").html(html);
        });

        return false;
    }
    function lessMenu() {
        $("li.nav_box").not(".mypage").children("ul").hide();console.log("ok!");
    }


li.nav_box是页面加载jQuery时生成的元素。

我可以在控制台上看到确定的消息。

但是隐藏功能不起作用。

当我在控制台上手动键入lessMenu()时,效果很好。

请给我建议!

最佳答案

loadMainMenu()在内部执行异步操作,这意味着您要在该操作完成之前执行lessMenu()

lessMenu()调用移到该异步操作的回调中:

$.getJSON('./inc/main_menu.json', function(data) {
    // the rest of your code, then...
    lessMenu();
});

10-08 01:31