DynaTree 在左键单击后右键单击时有两个突出显示的节点

标签 dynatree jquery-dynatree

我的问题是,每当我左键单击一个动态树节点,然后右键单击另一个动态树节点以显示我的上下文菜单时,左键单击的节点仍然以蓝色突出显示,因此我最终会得到两个蓝色节点。如果我右键单击连续的节点,突出显示可以正常工作,但左键单击的节点仍然突出显示。

左键单击处理会清除 mouseup 上的前一个节点。我通过

启动上下文菜单处理
document.oncontextmenu=contextMenu 

鼠标松开时也会调用。

我 try catch 右键 mouseup 事件并使上下文菜单节点事件,认为这会改变左键单击节点的状态,但事实并非如此。

$("#tree").mouseup(function(e){
   if(e.button == 2){
      e.target.setActive();// right mouse up
  }     
}); 

当右键单击另一个节点时,如何使最后一个左键单击的节点取消突出显示?同时突出显示两个节点看起来不太正确。我注意到,当右键单击另一个节点时,dynatree 上下文菜单演示不会取消突出显示先前左键单击的节点,这是设计使然吗?你能绕过它吗?

谢谢, 铝

最佳答案

好的,这有效

在我创建动态树后,在 myfile.js 中添加了:

var dtnode;   //dynatree node Global <--ADDED
var elem;     //DOM node Global  <--ADDED


Function BuildTree()


//ADDED following code after the dynatree was loaded 

$("#tree").mouseup(function(e){
if(e.button == 2){ //RIGHT MOUSE UP 
    if(!(elem == null)){
        var elem2 = e.currentTarget.document.activeElement;
        dtnode = tree.getDtNodeFromElement2(elem);
        dtnode.deactivate();
        elem = null;
        }   
}else{//LEFT MOUSE UP
    if(!(elem == null)){
        elem = null;
    }
    elem = e.currentTarget.document.activeElement;  
}   
}); 

//In jquery.dynatree.js
//$Version: 1.1.1$
//$Revision: 481, 2011-03-02 07:25:35$

//The following changes were made:

getSelectedNodes: function() {
    return this.tree.getSelectedNodes();
},

// AFTER THE ABOVE FUNCTION THE FOLLOWING FUNCTION WAS ADDED

getDtNodeFromElement2: function() {
    return this.tree.getDtNodeFromElement2();
},

//********************************************************

getSelectedNodes: function(stopOnParents) {
    var nodeList = [];
    this.tnRoot.visit(function(node){
    if( node.bSelected ) {
        nodeList.push(node);
        if( stopOnParents === true ){
           return "skip"; // stop processing this branch
        }
    }
});
return nodeList;
},

// AFTER THE ABOVE FUNCTION THE FOLLOWING FUNCTION WAS ADDED 

getDtNodeFromElement2: function(elem) {
    var sourceNode = getDtNodeFromElement(elem);
    return sourceNode;
},

摘要: 通过跟踪要左键单击的最后一个元素并通过 getDtNodeFromElement2 公开 dynatree getDtNodeFromElement 方法,每当第一次右键单击节点时,就可以调用最后一个左键单击的节点上的 deactivate 方法。这消除了树节点的同时突出显示。

关于DynaTree 在左键单击后右键单击时有两个突出显示的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8072393/

相关文章:

jquery - Dyna树ajax加载回调

jquery - 当用 $.empty() 清除包含的 div 时,无法第二次呈现 dynatree TreeView

javascript - 面对超过 2000 个项目时,Dynatree 返回错误

java - 使用 json 数据创建动态 TreeView - jsp 中的 dynatree

javascript - 用新数据重新加载 dynatree - destroy 方法或 reloadChildren 似乎不起作用

dynatree - 使用延迟加载扩展键路径

javascript - 如何重新加载/刷新/重新初始化 DynaTree?

javascript - 具有真实复选框的 Dynatree