轉:http://hi.baidu.com/wqeast/blog/item/c085db2a5907cc9b033bf6b9.html A few ASP.NET 2.0 TreeView coders were asking for a how to have context menus - per node - on the TreeView control. Well I spent a small amount of time on this and wanted to post one solution. A few caveats: a. IE Specific b. I never optimized the javascript to use parameters Hope this helps soeone achieve what they need. If you find a better solution please feel free to let me know! <%@ Page Language="C#" %><html> <head> <style> <!-- .skin1 { cursor:default; font:menutext; position:absolute; text-align:left; font-family: Arial, Helvetica, sans-serif; font-size: 10pt; width:120px; background-color:menu; border:1 solid buttonface; visibility:hidden; border:2 outset buttonhighlight; } .menuitems { padding-left:15px; padding-right:10px; } --> </style> <script type="text/javascript"> <!-- Begin var menuskin = "skin1"; var display_url = 1; // Show URLs in status bar? function showmenuie5() { if (event.srcElement.type != undefined) { var s = event.srcElement.id; var ind = s.replace("TreeView1t", ""); s = s.replace("TreeView1t", "TreeView1n"); document.getElementById('one').url = event.srcElement.href; document.getElementById('one').innerText = "Select"; var ch = document.getElementById(s); if (ch != null){ document.getElementById('two').url = "javascript:TreeView_ToggleNode(TreeView1_Data," + ind + "," + s + ",' '," + s + "Nodes)"; document.getElementById('two').innerText = "Expand//Collapse"; } else document.getElementById('two').outerHTML="<div id=two class=menuitems url=''></div>" var rightedge = document.body.clientWidth-event.clientX; var bottomedge = document.body.clientHeight-event.clientY; if (rightedge < ie5menu.offsetWidth) ie5menu.style.left = document.body.scrollLeft + event.clientX - ie5menu.offsetWidth; else ie5menu.style.left = document.body.scrollLeft + event.clientX; if (bottomedge < ie5menu.offsetHeight) ie5menu.style.top = document.body.scrollTop + event.clientY - ie5menu.offsetHeight; else ie5menu.style.top = document.body.scrollTop + event.clientY; ie5menu.style.visibility = "visible"; } else { ie5menu.style.visibility = "hidden"; } return false; } function hidemenuie5() { ie5menu.style.visibility = "hidden"; } function highlightie5() { if (event.srcElement.className == "menuitems") { event.srcElement.style.backgroundColor = "highlight"; event.srcElement.style.color = "white"; if (display_url) window.status = event.srcElement.url; } } function lowlightie5() { if (event.srcElement.className == "menuitems") { event.srcElement.style.backgroundColor = ""; event.srcElement.style.color = "black"; window.status = ""; } } function jumptoie5() { if (event.srcElement.className == "menuitems") { if (event.srcElement.getAttribute("target") != null) window.open(event.srcElement.url, event.srcElement.getAttribute("target")); else window.location = event.srcElement.url; } } // End --> </script> </head> <body> <form id="form1" runat="server"> <div id="ie5menu" class="skin0" onmouseover="highlightie5()" onmouseout="lowlightie5()" onclick="jumptoie5();"> <div id="one" class="menuitems" url=""> </div> <div id="two" class="menuitems" url=""> </div> </div> <asp:TreeView ID="TreeView1" runat="server"> <Nodes> <asp:TreeNode Text="a" Value="a"> <asp:TreeNode Text="b" Value="b"> <asp:TreeNode Text="c" Value="c"></asp:TreeNode> </asp:TreeNode> </asp:TreeNode> <asp:TreeNode Text="cc" Value="cc"> <asp:TreeNode Text="ccc" Value="ccc"> <asp:TreeNode Text="cccc" Value="cccc"></asp:TreeNode> </asp:TreeNode> </asp:TreeNode> </Nodes> <SelectedNodeStyle BackColor="#C00000" /> </asp:TreeView> </form> <script type="text/javascript"> if (document.all) { ie5menu.className = menuskin; document.getElementById('TreeView1').oncontextmenu = showmenuie5; document.body.onclick = hidemenuie5; } </script> </body> </html> |