如何添加树的右键点击事件以及正确的节点点击事件(基于微软树)

项目需要用到树控件,知道微软提供了一个WEB tree view控件,就拿过来用了。

可是在用的过程中,我需要实现树节点的左右键点击事件。但是微软的树只提供了对整个树的左右键点击事件。

所以不论你点击树的哪一部分而不是节点上,都会触发事件,这并不是我想要的结果,我希望仅鼠标点击节点本身的时候才会触发,所以我对treevie.htc进行了一些研究修改,基本上实现了我的需要。下面是我的解决方案:

首先注册事件:

< public:event  name ="onrightclick"  id ="_tvevtRightClick"   />    <!-- 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();
}

这样我们就实现了右击事件。

接着找到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 ;
}

这样我们就实现了左键点击事件。

这样就弥补了这些不足,希望这些对你有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值