$(function() {
$.ajax({
async : false,
url : getRootPath() + '/getPower.action',
type : 'post',
dataType : 'JSON',
success : function(data) {
addNav(data);
}
});
// 導航菜單綁定初始化
$("#menu").accordion({ // 初始化accordion
title : '導航菜單',
fit : true,
border : true,
animate : true
});
});
function addNav(data) {
$('#menu').accordion();
$.each(data, function(i, m) {
var menulist = '';
var mid = m.id;
menulist += '<ul>';
menulist += '<div id = "tree' + mid + '" ></div>';
menulist += '</ul>';
console.info(menulist);
$('#menu').accordion('add', {
title : m.text,
content : "<ul id='tree"+mid+"' ></ul>",
iconCls : 'icon ' + 'icon-sys',
selected : true,
collapsible : true
});
$.parser.parse();
addTree(mid, m.children);
});
}
function addTree(mid, menus) {
$("#tree"+ mid).tree(
{
data : menus,
type : 'json',
animate : true,
onSelect : function(node) {
node.state == 'closed' ? $(this)
.tree('expand', node.target) : $(this).tree(
'collapse', node.target);
},
onClick : function(node) {
if ($('#' + mid).tree('isLeaf', node.target)) {
addTab(node.text, node.url, node.icon);
}
}
});
}
這樣寫有什麼問題嗎,為什麼加載出來第一級的菜單有,但是往下的tree就出不來了,試了半天找不出原因,請各位前輩幫我看看
你的代碼中有
menulist += '<div id = "tree' + mid + '" ></div>';
又有
content : "<ul id='tree"+mid+"' ></ul>",
一個頁面裡面會出現id相同的元素,會導致沖突。是不是寫錯了?因為你下面的點擊事件中代碼裡面取的節點id是$('#' + mid),但是在之前的代碼裡面並沒有創建'#' + mid這樣id的節點。
還有一個問題是
menulist += '<ul>';
menulist += '<div id = "tree' + mid + '" ></div>';
menulist += '</ul>';
在ul標簽裡面對用的是li元素,你使用的是div,不符合規范。