【问题标题】:jQuery UI CSS styles not being applied to menu bar generated with getJSONjQuery UI CSS 样式未应用于使用 getJSON 生成的菜单栏
【发布时间】:2023-03-15 07:37:01
【问题描述】:

我正在尝试使用 JSON 数据生成一个 jQueryUI 菜单栏。 JSON 被正确解析为有效的 HTML;但是,菜单栏显示为无样式的无序列表,而不是像http://view.jqueryui.com/menubar/demos/menubar/default.html 上看到的顶部菜单栏那样有样式的菜单栏。请注意,此时将 JSON 数据转换为 HTML 的例程不会超过一级菜单,因此有意不读取子菜单选项(打开、保存、关闭等)。

由于某种原因,如果我在menuBar.jsp 中硬编码与下面的 jQuery 方法生成的 HTML 完全相同的 HTML,则菜单栏样式显示得很好。

这里是主页(appFrameNew.jsp):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>    

<title>Menu Test</title>

    <link rel="stylesheet" href="http://code.jquery.com/ui/1.8.18/themes/base/jquery-ui.css" />
    <link rel="stylesheet" href="http://view.jqueryui.com/menubar/themes/base/jquery.ui.menu.css" />
    <link rel="stylesheet" href="http://view.jqueryui.com/menubar/themes/base/jquery.ui.menubar.css" />

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>    
    <script src="http://view.jqueryui.com/menubar/ui/jquery.ui.core.js" type="text/javascript"></script>
    <script src="http://view.jqueryui.com/menubar/ui/jquery.ui.widget.js" type="text/javascript"></script>
    <script src="http://view.jqueryui.com/menubar/ui/jquery.ui.menu.js" type="text/javascript"></script>
    <script src="http://view.jqueryui.com/menubar/ui/jquery.ui.menubar.js" type="text/javascript"></script>
    <script src="http://view.jqueryui.com/menubar/ui/jquery.ui.position.js" type="text/javascript"></script>

    </head>
    <body>

    <div id="layout" class="layout">

       <jsp:include page="menuBar.jsp" flush="true" />

    </div>

    </body>
    </html>

这里是menuBar.jsp

<div class="demo"></div>

<script type="text/javascript">
    function select(event, ui) {
        if (ui.item.text() == 'Quit') {
            $(this).menubar('destroy');
        }
    }
    $(function() {
        $("#bar1").menubar({
            position: {
                within: $(".demo").add(window).first()
            },
            select: select
        });
    });

$.getJSON('menuBarTestJSON.json', function(data) {
    var output='<ul id="bar1" class="menubar">';
    for (var i in data.menuOptions) {
        output+='<li><a href="#">' + data.menuOptions[i].menubarItem + '</a></li>';
    }
    output+="</ul>";
    $(".demo").html(output);
});

</script>

<ul id="bar1" class="menubar">
    <li>
        <a href="#File">File</a>
        <ul>
            <li><a href="#Open">Open</a>
            <li><a href="#Save">Save</a></li>
        </ul>
    </li>
</ul>

最后,menuBarTestJSON.json:

{"menuOptions":[
    {
        "menubarItem":"File",
        "menuElement": {
            "option":"Open",
            "option":"Save",
            "option":"Close",
            "option":"Quit"
        }
    }
]}

几天来,我一直在网上寻找解决方案,但我需要尽快继续进行此项目。非常感谢任何帮助。谢谢。

【问题讨论】:

    标签: jquery css json jquery-ui


    【解决方案1】:

    您需要:

    1. 将初始化 jQuery UI 菜单的代码添加到 getJSON 回调或
    2. 使用http://api.jquery.com/live/ 观察DOM 的变化并初始化jQuery UI 菜单

    基本上发生的事情是 $("#bar1").menubar 启动一次,准备就绪。但是当你更新它的内容时,它不知道它需要再次启动。您必须手动要求它再次初始化菜单,或者让它监视更改。

    例子:

    <script type="text/javascript">
        function select(event, ui) {
            if (ui.item.text() == 'Quit') {
                $(this).menubar('destroy');
            }
        }
        function initMenu() {
            $("#bar1").menubar({
                position: {
                    within: $(".demo").add(window).first()
                },
                select: select
            });
        }
        $(function() { initMenu(); });
    
       $.getJSON('menuBarTestJSON.json', function(data) {
           var output='<ul id="bar1" class="menubar">';
           for (var i in data.menuOptions) {
                output+='<li><a href="#">' + data.menuOptions[i].menubarItem + '</a></li>';
           }
           output+="</ul>";
           $(".demo").html(output);
           initMenu();
       });
    
    </script>
    

    【讨论】:

    • 美丽。感谢您的解决方案和精彩的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2013-08-10
    相关资源
    最近更新 更多