我有一个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 +中使用此功能的任何想法?提前谢谢。
答案 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){...}
现在它在每个浏览器中工作。