2017-04-20 2 views
0

Ich habe eine RadTreeView mit dynamischen Ebenen und überprüfbaren Knoten basierend auf Bedingungen. Einige Ebenen haben möglicherweise keine überprüfbaren Knoten, einige überprüfbare Knoten oder alle überprüfbaren Knoten.Telerik RadTreeView OnClientNodeChecked Kompatibilitätsproblem mit IE9 +

Ich verwende das OnClientNodeChecked-Ereignis, um die ID der überprüften Knoten in einem versteckten Feld für die spätere Verwendung zu behalten und einen überprüften Knoten-Zähler zu aktualisieren.

Dieses Ereignis wird jedes Mal ausgelöst, wenn der Benutzer auf ein Kontrollkästchen neben einem Knoten klickt. Wenn der Benutzer nun auf ein Kontrollkästchen umschaltet, müssen alle überprüfbaren untergeordneten Knoten aktiviert/deaktiviert sein.

Hier ist die Strukturansichtssteuerung:

<telerik:RadTreeView RenderMode="Lightweight" runat="Server" ID="treeAccounts" EnableDragAndDrop="false" EnableDragAndDropBetweenNodes="false" Skin="Vista" CheckBoxes="True" 
       OnClientLoad="initializeSelectedNodes" OnClientNodeChecked="treeNodeChecked"> 
      </telerik:RadTreeView> 

Und hier ist die Javascript-Funktion:

var tree; 

function treeNodeChecked(sender, eventArgs) { 

    tree = $find("<%= treeAccounts.ClientID %>"); 
    var node = eventArgs.get_node(); 

    //Here I save the ID of the checked node 
    updateSelectedNodes(node); 

    if (eventArgs._domEvent.shiftKey || event.shiftKey) { 

     var children = node.get_allNodes(); 
     var checkedState = node.get_checked(); 

     //If the checked node had children and the shift key was pressed 
     //when the checkbox was clicked then I check/uncheck its child 
     //nodes. 
     for(m in children) 
     { 
      var child = children[m]; 
      child.set_checked(checkedState); 

      //Here I save the ID of the child nodes 
      updateSelectedNodes(child); 
     } 
    } 
} 

Das funktioniert perfekt in Chrome, Firefox und IE8- (treeNodeChecked im OnClientNodeChecked genannt wird), aber es funktioniert nicht in IE9 +. Das Problem ist, dass in IE9 + sowohl eventArgs._domEvent.shiftKey und event.shiftKey sind undefined.

Ich habe auch versucht event.keyCode oder event.which zur Überprüfung aber da das Ereignis nicht ein keypress ist oder keydown, sie sind undefined auch.

Irgendwelche Ideen, wie kann ich das in IE9 + arbeiten? Danke im Voraus.

Antwort

0

Nach dem Graben überall, fand ich einen Weg herum.

Ich habe diesen Code:

var shiftKeyPressed; 

document.addEventListener("keydown", keyDownEvent, false); 

function keyDownEvent(e) { 
    var keyCode = e.keyCode; 
    if(keyCode==16) { 
     shiftKeyPressed = true; 
    } 
} 

document.addEventListener("keyup", keyUpEvent, false); 

function keyUpEvent(e) { 
    var keyCode = e.keyCode; 
    if(keyCode==16) { 
     shiftKeyPressed = false; 
    } 
} 

Und dann, wenn ich überprüfen, ob die Shift-Taste gedrückt habe ich die neue Variable hinzugefügt:

if (eventArgs._domEvent.shiftKey || event.shiftKey || shiftKeyPressed){...} 

Jetzt in jedem Browser funktioniert es.

Verwandte Themen