转: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 >
< 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 >