zoukankan      html  css  js  c++  java
  • 用JQuery实现对ASP.NET TreeView控件的级连选中

    TreeView控件很强大,但是在JS方面却有点弱,特别是有时候想在TreeView的节点前加上一个CheckBox的时候,对于CheckBox的选中状态的控制有点头疼。
    比如说用TreeView实现权限分配,权限往往是一个树型的结构,客户常常会要求选中父节点的时候子节点随之全部选中或不选中。
    而选中一个子节点的时候那么这个子节点的父节点,爷爷节点,曾爷爷节点,一直到老祖宗那儿都得选中,有些程序员在服务器端代码实现(我以前也这样干过),但是这样用户体验很不好,但是用JS实现的话怎样才能选中父节点挺头疼。这中间还涉及到TreeView控件生成的HTML代码冗余很多。
    下面我用JQuery实现了这个功能,基本思路是根据TreeView生成的代码的ID的规律来实现的。
    有朋友觉得不错的话可以拿去用,使用也很方便,只要在ready的方法中加上下面这句代码即可:
    //第一个参数代表TreeView控件的ID,第二个参数:选中节点的时候是否也选中子节点,第三个参数:选中节点的时候,所有的父节点是否选中。            
    BindTreeView("
    TreeView2",true,true);
                

    下面是全部代码:
    <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        
    <title>TreeViewTest</title>

        
    <script src="http://www.cnblogs.com/Scripts/jquery-1.3.2.js"></script>

        
    <script>
            $(document).ready(Bind);
            
    function Bind() {
                BindTreeView(
    "TreeView2",true,true);
            }
            
    function BindTreeView(treeViewId,selectChild,selectParent) {

                $(
    "#" + treeViewId + " input").click(function() {
                    
    if (selectChild) {
                        
    //                    var cbid = $(this).get(0).id;
                        //                    var sbcbid = "#" + cbid.substring(0, cbid.indexOf("CheckBox")) + "Nodes input";
                        var divItem = $(this).parent().parent().parent().parent().next();
                        divItem.find(
    "input").attr("checked", $(this).get(0).checked); 
                      
                        
    //                    $(sbcbid).attr("checked", $(this).get(0).checked);
                    }
                    
    if (selectParent) {
                        SelectParentNode(treeViewId, $(
    this));
                    }
                });
            }
            
    function SelectParentNode(treeViewId,node) {
                
    if (node.get(0).checked == true) {
                    
    var pdiv = node.parent().parent().parent().parent().parent();
                    
    if (pdiv.get(0).id != treeViewId) {
    //                    var pid = "#" + pdivid.substring(0, pdivid.indexOf("Nodes")) + "CheckBox";
                        //                    $(pid).attr("checked", node.get(0).checked);
                        pdiv.prev().find("input").attr("checked", node.get(0).checked);
                        SelectParentNode(treeViewId, pdiv.prev().find(
    "input"));
                    }
                }
            }
        
    </script>

    </head>
    <body>
        
    <form id="form1" runat="server">
        
    <div>
            
    <asp:TreeView ID="TreeView2" runat="server" ShowCheckBoxes="All" ShowLines="True"
                Width
    ="325px">
                
    <Nodes>
                    
    <asp:TreeNode Text="C:" Value="C:">
                        
    <asp:TreeNode Text="WINDOWS" Value="WINDOWS">
                            
    <asp:TreeNode Text="System" Value="System"></asp:TreeNode>
                        
    </asp:TreeNode>
                    
    </asp:TreeNode>
                    
    <asp:TreeNode Text="D:" Value="D:">
                        
    <asp:TreeNode Text="程序" Value="程序">
                            
    <asp:TreeNode Text="开始" Value="开始">
                                
    <asp:TreeNode Text="控制面板" Value="控制面板"></asp:TreeNode>
                                
    <asp:TreeNode Text="打印机" Value="打印机"></asp:TreeNode>
                            
    </asp:TreeNode>
                        
    </asp:TreeNode>
                        
    <asp:TreeNode Text="娱乐" Value="娱乐">
                            
    <asp:TreeNode Text="电影" Value="电影">
                                
    <asp:TreeNode Text="动作" Value="动作"></asp:TreeNode>
                            
    </asp:TreeNode>
                        
    </asp:TreeNode>
                    
    </asp:TreeNode>
                    
    <asp:TreeNode Text="E:" Value="E:">
                        
    <asp:TreeNode Text="游戏" Value="游戏"></asp:TreeNode>
                        
    <asp:TreeNode Text="好玩的" Value="好玩的"></asp:TreeNode>
                    
    </asp:TreeNode>
                    
    <asp:TreeNode Text="F:" Value="F:">
                        
    <asp:TreeNode Text="备份" Value="备份">
                            
    <asp:TreeNode Text="软件" Value="软件"></asp:TreeNode>
                        
    </asp:TreeNode>
                    
    </asp:TreeNode>
                    
    <asp:TreeNode Text="G:" Value="G:"></asp:TreeNode>
                
    </Nodes>
            
    </asp:TreeView>
        
    </div>
        
    </form>
    </body>
    </html>
  • 相关阅读:
    windows server 2012 如何开启 hyper-v 并创建虚拟机
    ABP框架系列之二十四:(Email-Sending-EF-电子邮件发送)
    ABP框架系列之二十三:(EF-MySql-Integration-EF-MySql-集成)
    ABP框架系列之二十二:(Dynamic-Web-API-动态WebApi)
    ABP框架系列之二十一:(Domain-Services-领域服务)
    ABP框架系列之二十:(Dependency-Injection-依赖注入)
    ABP框架系列之十九:(Debugging-调试)
    ABP框架系列之十八:(Data-Transfer-Objects-数据转换对象)
    ABP框架系列之十七:(Data-Filters-数据过滤)
    ABP框架系列之十六:(Dapper-Integration-Dapper集成)
  • 原文地址:https://www.cnblogs.com/hawkon/p/1560937.html
Copyright © 2011-2022 走看看