我在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>
答案 0 :(得分:2)
如果我理解你的问题,你想要将选中的Nodes文本和Value添加到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
}
答案 1 :(得分:1)
您可以使用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;
}