// 1. 重複 ID 衝突
menulist += '<div id="tree' + mid + '"></div>';
content: "<ul id='tree" + mid + "'></ul>", // 同一頁面出現兩個相同 id="treeXXX"
// 2. 點擊事件選擇器錯誤
$('#' + mid).tree('isLeaf', node.target) // 但頁面從未創建 id="mid" 的元素
// 3. HTML 結構不合規
menulist += '<ul>';
menulist += '<div id="tree' + mid + '"></div>'; // ul 直系子元素只能是 li
menulist += '</ul>';
treeContainer_${mid},樹容器用 tree_${mid}。$('#tree_' + mid).tree(...)。<ul><li><div id="tree_${mid}"></div></li></ul> 或直接用 <ul id="tree_${mid}"></ul>。function addNav(data) {
$('#menu').accordion();
$.each(data, function(i, m) {
var mid = m.id;
var treeId = 'tree_' + mid;
var containerId = 'container_' + mid;
$('#menu').accordion('add', {
title: m.text,
content: '<ul id="' + treeId + '"></ul>', // 直接用 ul 作為 tree 容器
iconCls: 'icon icon-sys',
selected: true
});
// 等 accordion 渲染完成後再初始化 tree
setTimeout(function() {
$('#' + treeId).tree({
data: m.children,
animate: true,
onClick: function(node) {
if ($('#' + treeId).tree('isLeaf', node.target)) {
addTab(node.text, node.url, node.icon);
}
}
});
}, 0);
});
}
ul > li > div 或 ul > li,不直接 ul > div。子菜單不顯示源於 **ID 衝突、選擇器錯誤、HTML 不合規** 三重問題。重構後代碼結構清晰、ID 隔離、初始化時序正確,即可正常渲染多級菜單。