代码之家  ›  专栏  ›  技术社区  ›  Raul Agrait

无法在jqueryui选项卡内创建jstree

  •  1
  • Raul Agrait  · 技术社区  · 14 年前

    我无法在jquery ui选项卡内创建jstree。如果我在选项卡之外创建jstree,它可以正常工作。有人知道jstree是否与jquery ui选项卡不兼容吗?

    我的网页在下面。如果我换下下面的一行

    var treeContainer = jQuery("#tabTree");
    

    用:

    var treeContainer = jQuery("#pageTree");
    

    然后,该树在页中的tab控件下面加载fine。


    <body>
        <div id="myTabs">
            <ul>
                <li><a href="tab1.html">Tab 1</a></li>
                <li><a href="tab2.html">Tab 2</a></li>
                <li><a href="tab3.html">Tab 3</a></li>
            </ul>
        </div>
    
        <div id="pageTree"></div>
    
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.js"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.0/jquery-ui.js" type="text/javascript"></script>         
        <script type="text/javascript" src="jsTree/jquery.tree.js"></script>
        <script type="text/javascript">     
            $(function(){
    
                $("#myTabs").tabs();
    
                var treeContainer = jQuery("#tabTree");
                var treeData = {
                    data: {
                        type : "json",
                        opts : {
                            static : [
                                {
                                    data: "A node",
                                    children: [
                                        { data : "Child node 1" },
                                        { data : "Child node 2" },
                                        { data : "Child node 3" }
                                    ]
                                }
                            ]
    
                        }
                    }
                };
                treeContainer.tree(treeData);
            });     
        </script>
    </body>
    

    以下是tab3.html的内容:

    <div id="tab3Container">        
        <div id="tabTree"></div>
    </div>
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   Nick Craver    14 年前

    这些选项卡中的内容在单击该选项卡以加载它之前不存在,因此选择器 jQuery("#tabTree") 没有要匹配的内容,尚未存在与该选择器匹配的元素。加载ajax页面时,需要运行以下代码:

    var treeLoaded = false;
    $("#myTabs").bind( "tabsload", function(event, ui) {
      if(!treeLoaded && jQuery("#tabTree", ui.panel).length) {
        var treeContainer = jQuery("#tabTree");
        var treeData = {
            data: {
                type : "json",
                opts : {
                    static : [
                        {
                            data: "A node",
                            children: [
                                { data : "Child node 1" },
                                { data : "Child node 2" },
                                { data : "Child node 3" }
                            ]
                        }
                    ]
    
                }
            }
        };
        treeContainer.tree(treeData);
        treeLoaded = true;
      }
    });
    

    这个 tabsload 事件, described here ,在加载ajax内容时运行。上面的代码检查 id="tabTree" 在加载的内容中,如果是,而且树还没有构建,则构建它。