2010-10-29 126 views
0

我試圖展示一個jQuery菜單,它是從ajax調用到一個xml文件,然後一個事件處理程序連接到所有具有子菜單的li對象。我的問題是它dosnt工作。如果我按下應該展開並顯示子菜單的子類別,則會完成此操作,但我的樹中的頂級節點還會調整其隱藏/顯示值?所以,我的事件綁定有什麼問題,請幫助我!jQuery菜單問題

function heightToggle(showhide) {  
    $(this).children("ul").is(":hidden") ? $(this).children("ul").show() : $(this).children("ul").hide(); 
} 

function createNode(parent) 
{  
    var current = $("<li/>").attr("id", $(this).attr("ID") || "").html("<span>"+ $(this).attr("name") +"</span>").appendTo(parent); 

    if($(this).children("node").length != 0) 
    { 
     var branch = $("<ul/>").appendTo(current); 
     current.addClass("hasChildren");    

     branch.hide(); 
     var findElem = $("#" + $(this).attr("ID")); 
     findElem.bind('click', heightToggle); 

     $.each($(this).children("node"), createNode, [branch]);      

    } 
} 

var domain = "<%=domainId %>"; 
var nodeId = "<%=nodeId %>"; 
var path = "<%=path %>"; 

var container = $("#menuContainer"); 

$.ajax({ 
    type: "POST", 
    contentType: "application/x-www-form-urlencoded", 
    url: "../webservices/productNavXml.asmx/GetXmlNodes", 
    data : "companyId=" + domain, 
    dataType: "xml", 
    success: function(xml) { 
    $.each($(xml).find("node[name='Products']").children("node"), createNode, [container]);   
    } 
});  



    if(nodeId != null && nodeId != "") 
    { 
    GetProductPage(nodeId); 
    } 

});


菜單看起來是這樣的,如果不擴大

1.TopMenu 1.1分1.2 子 2.TopMenu

如果我按1.1 IM應該得到第三LVL 1.1.1但而不是 「1.TopMenu」 關閉給所有我看到的是

1.TopMenu 2.TopMenu

請幫忙!

問候 Marthin

回答

0

所以我發現我的問題。我試圖給每個li-tag添加一個事件處理程序。當我把樹打下來的時候,我不僅點擊了當前的li,而且還點擊了它的父li,所以不止一次調用了heightToggle函數。總的來說,每個李氏父母有一個+一個。 我通過將事件處理程序添加到li對象的span標記中來解決此問題。

function createNode(parent) 

{
變種電流= $( 「」)。ATTR( 「ID」,$(本).attr( 「ID」)|| 「」)。html的( 「」 + $(此).attr(「name」)+「」)。appendTo(parent);

if($(this).children("node").length != 0) 
{ 
    var branch = $("<ul/>").appendTo(current); 
    current.addClass("hasChildren");    

    branch.hide(); 
    var findElem = $("#" + $(this).attr("ID")); 
    findElem.bind('click', heightToggle); 

    $.each($(this).children("node"), createNode, [branch]);      

} 

}

我改變這個insted的

function createNode(parent) 
{  
    var current = $("<li/>").attr("id", $(this).attr("ID") || "").appendTo(parent); 
    var textSpan = $("<span/>").html($(this).attr("name")).appendTo(current); 
    if($(this).children("node").length != 0) 
    { 
     var branch = $("<ul/>").appendTo(current); 
     current.addClass("hasChildren"); 
     branch.hide(); 
     $.each($(this).children("node"), createNode, [branch]); 
    } 
    textSpan.click(heightToggle); 
}