Javascript 如何在加载VB ASP时加载jstree复选框
我正在尝试使用ASP加载jstree复选框。代码隐藏获取一个树节点并填充一个列表项供jstree使用。在这个过程中,有一些被标识为“Checked”的节点,我将类属性jstree clicked添加到列表项中。但是,当页面加载时,它没有任何效果。请让我知道如何使用预先选中的复选框填充这些复选框。我有以下在我的后端Javascript 如何在加载VB ASP时加载jstree复选框,javascript,jquery,asp.net,vb.net,jstree,Javascript,Jquery,Asp.net,Vb.net,Jstree,我正在尝试使用ASP加载jstree复选框。代码隐藏获取一个树节点并填充一个列表项供jstree使用。在这个过程中,有一些被标识为“Checked”的节点,我将类属性jstree clicked添加到列表项中。但是,当页面加载时,它没有任何效果。请让我知道如何使用预先选中的复选框填充这些复选框。我有以下在我的后端 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim tNode As TreeNode
Dim treeView As New TreeView
Dim tNodeCollection As New TreeNodeCollection
tNodeCollection = treeView.Nodes
' Code to generate and store within
' a System.Web.UI.WebControls.TreeView object
' ...
' ...
' ...
repeater.DataSource = tNodeCollection
repeater.DataBind()
End Sub
Protected Sub repeater_ItemDataBound(sender As Object, e As RepeaterItemEventArgs)
Dim tNode As TreeNode
Dim li As New HtmlGenericControl
Dim ul As New HtmlGenericControl("ul")
tNode = e.Item.DataItem
If (tNode Is Nothing) Then
Return
End If
li = e.Item.FindControl("listItem")
li.ID = tNode.Value
li.InnerHtml = tNode.Text
If tNode.Checked Then
li.Attributes.Add("rel", "true")
End If
If tNode.ChildNodes.Count > 0 Then
li.Controls.Add(ul)
searchChildNodes(tNode.ChildNodes, ul)
End If
End Sub
Private Sub searchChildNodes(childNodes As TreeNodeCollection, ul As HtmlGenericControl)
Dim tNode As TreeNode
For Each tNode In childNodes
Dim li As New HtmlGenericControl("li")
li.ID = tNode.Value
li.InnerHtml = tNode.Text
ul.Controls.Add(li)
If tNode.ChildNodes.Count > 0 Then
Dim unorderedList As New HtmlGenericControl("ul")
li.Controls.Add(unorderedList)
searchChildNodes(tNode.ChildNodes, unorderedList)
End If
Next
End Sub
下面是代码的aspx部分
<div id="myTreeNode" >
<asp:Repeater ID="rptr" runat="server" EnableViewState="False" OnItemDataBound="repeater_ItemDataBound" >
<headerTemplate>
<ul>
</headerTemplate>
<ItemTemplate>
<li id="listItem" runat="server"></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
</div>
应该添加jstree clicked
类的不是li
元素(我在这一行看到:li.Attributes.add(“class”,“jstree clicked”)
),而是li
中的元素
确保将该类设置为javascript文件中li
的立即a
子类,然后jsTree检查属性,并在加载所有内容后预选复选框。这将适当地选中该复选框。如上所述,这避免了只处理CSS,而是处理整个节点
$("#myTreeNode").bind('ready.jstree', function (event, data) {
var $tree = $(this);
$($tree.jstree().get_json($tree, {
flat: true
})).each(function () {
var checked = $(this).attr('rel');
var node;
if( checked == "true"){
node = $("#myTreeNode").jstree().select_node(this.id);
}
});
});
由于a
元素是从jsTree插件添加的,我需要通过jQuery设置a
元素类吗?如果是这样,那么什么jsTree函数适合调用呢?只需将类添加到a
元素,jsTree就会处理css。但我发现了一个问题——这只会可视化选中的节点,但如果用户尝试取消选中这些节点,则无法正常工作。为了让用户能够做到这一点,我看到了两个选项:1)设置树的配置(例如JSON),然后在初始化时将其提供给jsTree;刚刚设置了“state”:{“selected”:true}
用于要预选的节点;或者2)在jsTree初始化之后访问节点,并使用$(“#yourtreeid”).jsTree()选择它们。选择_节点
方法。检查: