我的问题是每当我左键单击一个dynatree节点然后右键单击另一个dynatree节点以显示我的上下文菜单时,左键单击的节点仍然以蓝色突出显示,因此我最终得到两个蓝色节点。如果我然后右键单击连续节点,突出显示正常,但左键单击节点仍然突出显示。
左键单击处理会在mouseup上清除上一个节点。我通过
启动上下文菜单处理document.oncontextmenu=contextMenu
也可以在鼠标按下时调用。
我试图捕获右键鼠标事件并使上下文菜单节点处于活动状态,这会改变左侧clickked节点的状态但不是这样。
$("#tree").mouseup(function(e){
if(e.button == 2){
e.target.setActive();// right mouse up
}
});
当右键单击另一个节点时,如何让最后一个左键单击节点取消突出显示?一次突出显示两个节点看起来不正确。我注意到当右键单击另一个节点时,dynatree上下文菜单演示不会取消突出显示之前左键单击的节点,所以这是设计的吗?你能解决它吗?
谢谢, 人
答案 0 :(得分: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方法。这消除了树节点的同时突出显示。
答案 1 :(得分:1)
我需要添加一个我添加到jquery.dynatree.js的简短方法,以使其正常工作。
//--- Class members ------------------------------------------------------------
DynaTree.prototype = {
// Constructor
// member functions
getDtNodeFromElement2: function(elem) {
var sourceNode = getDtNodeFromElement(elem);
return sourceNode;
},
答案 2 :(得分:1)
我知道这是旧的,但我遇到了同样的问题。当手动尝试管理节点上的'dynatree-active'
类以强制突出显示时,我遇到了选择多个节点的问题。通过左键单击和右键单击,dynatree管理所有选择和取消选择活动节点。
$("#tree").mouseup(function(e){
if(e.button == 2) e.target.click();
});
我对这一点感到挣扎,我希望能为别人带来一些痛苦。
答案 3 :(得分: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元素再次出现旧突出显示问题的问题。
Al