Telerik RadTreeView与IE9 +的OnClientNodeChecked兼容性问题

时间:2017-04-20 19:20:12

标签: javascript jquery telerik client-side radtreeview

我有一个RadTreeView,它具有基于条件的动态级别和可检查节点。某些级别可能没有可检查节点,某些可检查节点或所有可检查节点。

我使用OnClientNodeChecked事件将已检查节点的ID保存在隐藏字段中供以后使用,并更新已检查的节点计数器。

每次用户点击节点旁边的复选框时,都会触发此事件。现在,如果用户切换+单击复选框,则应选中/取消选中所有可检查子节点。

这是树视图控件:

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

这是javascript函数:(在OnClientNodeChecked中调用treeNodeChecked)

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);
        }
    }
}

这在Chrome,Firefox和IE8中完美运行,但在IE9 +中无效。 问题是在IE9 +中, eventArgs._domEvent.shiftKey event.shiftKey 都是 未定义

我还尝试检查 event.keyCode event.which ,但由于该事件不是 keypress keydown < / em>,它们也是 undefined

有关如何在IE9 +中使用此功能的任何想法?提前谢谢。

1 个答案:

答案 0 :(得分:0)

在到处挖掘之后,我找到了一条路。

我添加了这段代码:

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;
    } 
}

然后当我检查是否按下了shift键时,我添加了新变量:

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

现在它在每个浏览器中工作。