【问题标题】:How can i get all checked items and values in RadTreeView on client side?如何在客户端的 RadTreeView 中获取所有检查的项目和值?
【发布时间】:2013-01-03 19:58:48
【问题描述】:

我在 RadCombobox 中有 RadTreeView。 我需要使用 javascipt 创建函数,因为我想在关闭 RadComboBox 后读取所有选中的项目及其值。

如何使用 javascript 获取所有选中的项目和值?

这是我的源代码:

function OnClientDropDownClosed()
        {
            //Foreach all checked items and save to array 
            //I want to need for example: Text: John Black, Value: 1
        }

<telerik:RadComboBox ID="RadComboBox1" OnClientDropDownClosed="OnClientDropDownClosed" runat="server" Width="500px" ShowToggleImage="True"
                ExpandAnimation-Type="None"
                CollapseAnimation-Type="None">
                <ItemTemplate>
                    <div id="div1">
                        <telerik:RadTreeView runat="server" ID="RadTreeView1" CheckBoxes="true" Width="100%"
                            Height="140px" TriStateCheckBoxes="true">
                            <Nodes>
                                <telerik:RadTreeNode runat="server" Text="Company" Value="9" Expanded="true">
                                    <Nodes>
                                        <telerik:RadTreeNode runat="server" Text="Employees A" Value="10" Expanded="true">
                                            <Nodes>
                                                <telerik:RadTreeNode runat="server" Value="1" Text="John Black">
                                                </telerik:RadTreeNode>

                                                <telerik:RadTreeNode runat="server" Value="2" Text="Peter Snopy">
                                                </telerik:RadTreeNode>

                                                <telerik:RadTreeNode runat="server" Value="3" Text="George New">
                                                </telerik:RadTreeNode>

                                                <telerik:RadTreeNode runat="server" Value="4" Text="William Wall">
                                                </telerik:RadTreeNode>
                                            </Nodes>
                                        </telerik:RadTreeNode>

                                        <telerik:RadTreeNode runat="server" Text="Employees B" Value="11" Expanded="true">
                                            <Nodes>
                                                <telerik:RadTreeNode runat="server" Value="5" Text="John Black">
                                                </telerik:RadTreeNode>

                                                <telerik:RadTreeNode runat="server" Value="6" Text="Peter Snopy">
                                                </telerik:RadTreeNode>

                                                <telerik:RadTreeNode runat="server" Value="7" Text="George New">
                                                </telerik:RadTreeNode>

                                                <telerik:RadTreeNode runat="server" Value="8" Text="William Wall">
                                                </telerik:RadTreeNode>
                                            </Nodes>
                                        </telerik:RadTreeNode>
                                    </Nodes>
                                </telerik:RadTreeNode>
                            </Nodes>
                        </telerik:RadTreeView>
                    </div>
                </ItemTemplate>
                <Items>
                    <telerik:RadComboBoxItem Text="" />
                </Items>
            </telerik:RadComboBox>

【问题讨论】:

    标签: javascript radcombobox radtreeview


    【解决方案1】:

    如果我正确理解您的问题,您想将选中的节点文本和值添加到 javacript 中的数组中,这是解决方案:

    function OnClientDropDownClosed(sender, eventArgs)
    { 
    var arr_of_nodes = new Array();
    
     var tree=sender.get_items().getItem(0).findControl("RadTreeView1");
     var treenodes=tree.get_nodes(); 
      for (i=0; i<treenodes.get_count(); i++) 
       { 
    
           if (treenodes.getNode(i).get_checked()) 
           { 
            var _nodeText=treenodes.getNode(i).get_text();
            var _nodeValue=treenodes.getNode(i).get_value();
           arr_of_nodes.push(_nodeText+":"+_nodeValue);
    
           } 
       } 
     //do something with the array arr
    }
    

    【讨论】:

    • 这只是迭代第一级节点。多级树视图有递归函数吗?
    • 请查看我对多级节点使用递归函数的答案
    【解决方案2】:

    您可以使用TreeView.get_nodes()TreeNode.get_nodes(),但它们只会为您提供直接节点,而不是它们的完整后代。

    因此对于具有不同级别节点的 RadTreeView,我们需要有一个递归函数来向下钻取整个节点层次结构。

    这个答案改编自 wizpert 的答案和这个 Telerik 博客: http://www.telerik.com/blogs/how-to-get-the-checked-items-from-a-treeview-with-checkboxes

    function OnClientDropDownClosed(sender, eventArgs) 
    {
        // first let's get hold of the treeview (sender is the combobox)
        var tree = sender.get_items().getItem(0).findControl("RadTreeView1");
    
        // pass the treeview nodes to another function to find the checked nodes
        var items = getCheckedNodes(tree.get_nodes());
    
        var text = 'None selected'; // default text
    
        if (items.length > 0)
        {
            var texts = [];
            for (var i = 0; i < items.length; i++) 
            {
                // extract the text only of the checked nodes
                texts.push(items[i].get_text());
            }
            text = texts.join(', '); // comma separated text
        }
    
        sender.set_text(text); // set the combobox text
    }
    
    function getCheckedNodes(nodes) {
        var node, childCheckedNodes;
        var checkedNodes = []; // array of the checked nodes
    
        for (var i = 0; i < nodes.get_count(); i++) {
            node = nodes.getNode(i);
            if (node.get_checked()) {
                checkedNodes.push(node); // add to array if checked
            }
    
            // to understand recursion, first you must understand recursion
            if (node.get_nodes().get_count() > 0)
            {
                // recursive function call
                childCheckedNodes = getCheckedNodes(node.get_nodes());
    
                if (childCheckedNodes.length > 0)
                {
                    // append array with results from recursive call
                    checkedNodes = checkedNodes.concat(childCheckedNodes);
                }
            }
        }
    
        return checkedNodes;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      相关资源
      最近更新 更多