项目需要用到树控件,知道微软提供了一个WEB tree view控件,就拿过来用了。
可是在用的过程中,我需要实现树节点的左右键点击事件。但是微软的树只提供了对整个树的左右键点击事件。
所以不论你点击树的哪一部分而不是节点上,都会触发事件,这并不是我想要的结果,我希望仅鼠标点击节点本身的时候才会触发,所以我对treevie.htc进行了一些研究修改,基本上实现了我的需要。下面是我的解决方案:
首先注册事件:
<
public:event
name
="onrightclick"
id
="_tvevtRightClick"
/>
<!--
Joy XXX
-->
< public:event name ="onnodeclick" id ="_tvevtNodeClick" /> <!-- Joy XXX -->
< public:event name ="onnodeclick" id ="_tvevtNodeClick" /> <!-- Joy XXX -->
然后找到:function contextmenu(),修改这个方法,其实只是增加一些代码:
function
contextmenu()
{
event.cancelBubble = true ;
var el = this .parentElement.treenode;
e = element.document.createEventObject(event);
e.treeNodeIndex = getNodeIndex(el);
event.returnValue = element.fireEvent( " oncontextmenu " , e);
g_nodeClicked = el;
_tvevtRightClick.fire(e);
fireQueuedEvents();
}
{
event.cancelBubble = true ;
var el = this .parentElement.treenode;
e = element.document.createEventObject(event);
e.treeNodeIndex = getNodeIndex(el);
event.returnValue = element.fireEvent( " oncontextmenu " , e);
g_nodeClicked = el;
_tvevtRightClick.fire(e);
fireQueuedEvents();
}
这样我们就实现了右击事件。
接着找到function doNodeClick(el),在方法最后增加一些代码:
function
doNodeClick(el)
{
if (g_bInteractive == false )
return ;
g_nodeClicked = el;
// The element, which is in a content node outside of the document, is outside the event hierarchy.
// Fire the event ourselves, rather than relying on bubbling.
event.cancelBubble = true ;
el.fireEvent( " onclick " ); // Execute our onclick handler
element.fireEvent( " onclick " , event); // Execute the tree's onclick handler
if (getNodeAttribute(el, " NavigateUrl " ) != null )
{
var target = getNodeAttribute(el, " Target " );
if (target == null || target.toLowerCase() == " _self " )
return false ;
}
selectNode(el);
e = element.document.createEventObject(event);
e.treeNodeIndex = getNodeIndex(el);
_tvevtNodeClick.fire(e);
return true ;
}
{
if (g_bInteractive == false )
return ;
g_nodeClicked = el;
// The element, which is in a content node outside of the document, is outside the event hierarchy.
// Fire the event ourselves, rather than relying on bubbling.
event.cancelBubble = true ;
el.fireEvent( " onclick " ); // Execute our onclick handler
element.fireEvent( " onclick " , event); // Execute the tree's onclick handler
if (getNodeAttribute(el, " NavigateUrl " ) != null )
{
var target = getNodeAttribute(el, " Target " );
if (target == null || target.toLowerCase() == " _self " )
return false ;
}
selectNode(el);
e = element.document.createEventObject(event);
e.treeNodeIndex = getNodeIndex(el);
_tvevtNodeClick.fire(e);
return true ;
}
这样我们就实现了左键点击事件。
这样就弥补了这些不足,希望这些对你有所帮助。