2011-11-09 57 views
2

我的問題是每當我離開點擊一個dynatree節點,然後右鍵單擊另一個dynatree節點來顯示我的上下文菜單時,左鍵單擊的節點仍以藍色高亮顯示,藍色的兩個節點。如果我然後右鍵單擊連續節點,突出顯示可正常工作,但左鍵單擊的節點仍然突出顯示。DynaTree在左鍵單擊後右鍵點擊兩個突出顯示的節點

左鍵單擊處理會清除mouseup上的前一個節點。我通過啓動上下文菜單處理

document.oncontextmenu=contextMenu 

這也是在鼠標上調用。

我試圖捕獲正確的按鈕mouseup事件,並使上下文菜單節點活躍思考,將改變左點擊節點的狀態,但不是這樣。

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

當右鍵單擊另一個節點時,我應該如何讓最後一次左鍵單擊的節點不亮?一次突出兩個節點看起來不正確。我注意到dynatree上下文菜單演示不會忽略先前左鍵單擊的節點,當另一個節點右鍵單擊時,這是否是由設計?你能解決它嗎?

感謝, 鋁

回答

2

確定這個工程

在我myfile.js後,我創造我加入了dynatree:

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方法。這消除了樹節點的同時突出顯示。

+0

您應該將您的答案標記爲已接受,以便其他人可以從您的調查結果中受益 – bakoyaro

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元素的舊突出問題再次出現一個問題

相反被點擊。

1

我需要加我加jquery.dynatree.js,使其工作很短的方法。

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

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


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

我知道這是舊的,但我碰到了同樣的問題。當手動嘗試管理節點上的'dynatree-active'類以強制突出顯示時,我遇到了多個節點被選中的問題。通過使用左鍵單擊和右鍵單擊,dynatree管理所有選擇和取消選擇活動節點。

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

我在這一點上掙扎了一下,希望它能救一些人一些痛苦。