2

私の問題は、ダイナツリー ノードを左クリックし、別のダイナツリー ノードを右クリックしてコンテキスト メニューを表示するたびに、左クリックしたノードが青色で強調表示されたままになるため、最終的に 2 つのノードが青色になることです。その後、連続するノードを右クリックすると、強調表示は正しく機能しますが、左クリックしたノードは強調表示されたままになります。

左クリック処理は、マウスアップ時に前のノードをクリアします。コンテキストメニューの処理を開始します

document.oncontextmenu=contextMenu 

マウスアップでも呼び出されます。

右ボタンの mouseup イベントをキャプチャして、左クリックしたノードの状態を変更すると考えてコンテキスト メニュー ノードをアクティブにしようとしましたが、そうではありませんでした。

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

別のノードが右クリックされたときに、最後に左クリックされたノードをハイライト解除するにはどうすればよいですか? 一度に 2 つのノードが強調表示されるのは正しくありません。dynatree コンテキスト メニューのデモでは、別のノードを右クリックしたときに、以前に左クリックしたノードのハイライトが解除されないことに気付きました。これは仕様によるものですか?? あなたはそれを回避できますか?

ありがとう、アル

4

4 に答える 4

2

OKこれは動作します

追加したダイナツリーを作成した後の 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 メソッドを公開することにより、ノードの最初の右クリックが発生するたびに、最後に左クリックされたノードで非アクティブ化メソッドを呼び出すことができます。これにより、ツリー ノードを同時に強調表示する必要がなくなります。

于 2011-11-10T18:14:50.023 に答える
1

これは古いことは知っていますが、同じ問題に遭遇しました。ノード上のクラスを手動で管理'dynatree-active'して強調表示を強制しようとすると、複数のノードが選択されるという問題がありました。左クリックと右クリックを併用することで、dynatree はすべてのアクティブ ノードの選択と選択解除を管理していました。

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

私はこれに少し苦労しました。誰かの痛みを和らげることができれば幸いです.

于 2012-09-26T15:30:04.193 に答える
0

ディスプレイの周りをクリックしているときに見つけたもう1つの変更

それ以外の

}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 に答える