2

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

左键单击处理清除 mouseup 上的前一个节点。我通过启动上下文菜单处理

document.oncontextmenu=contextMenu 

这也称为鼠标上移。

我试图捕获右键 mouseup 事件并使上下文菜单节点处于活动状态,这会改变左单击节点的状态,但不是这样。

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

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

谢谢,艾尔

4

4 回答 4

2

好的,这行得通

在我创建 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 方法。这消除了同时突出显示树节点。

于 2011-11-10T18:14:50.023 回答
1

我需要添加一个我添加到 jquery.dynatree.js 的简短方法以使其工作。

//--- Class members ------------------------------------------------------------

DynaTree.prototype = {
// Constructor
// member functions


getDtNodeFromElement2: function(elem) {
    var sourceNode = getDtNodeFromElement(elem);
    return sourceNode;
},
于 2012-07-11T21:01:02.257 回答
1

我知道这很旧,但我遇到了同样的问题。当手动尝试管理'dynatree-active'节点上的类以强制突出显示时,我遇到了选择多个节点的问题。通过使用左键单击和右键单击,dynatree 管理所有选择和取消选择活动节点。

$("#tree").mouseup(function(e){
        if(e.button == 2) e.target.click();
}); 

我在这个问题上挣扎了一会儿,我希望它能减轻一些人的痛苦。

于 2012-09-26T15:30:04.193 回答
0

我在点击显示屏时发现的另一个变化

代替

}else{//LEFT MOUSE UP
    if(!(elem == null)){
        elem = null;
    }
    elem = e.currentTarget.document.activeElement;  
}   

采用

}else{//LEFT MOUSE UP
    if(!(elem == null)){
        elem = null;
    }
    elem = e.currentTarget.document.activeElement;
    if(elem.tagName != 'A'){
        elem = e.target;
    }  
}  

这更正了单击非 A 元素的旧突出显示问题再次出现的问题。

于 2011-11-10T20:44:57.113 回答