Asp.net Menu控件 点击展开子目录

前台的JS:

<script type="text/javascript">
    function FixMenu(menuTable) {

        if (!menuTable) { return };

        var tbody = menuTable.getElementsByTagName("TBODY")[0];

        var tr = tbody.getElementsByTagName("TR")[0];

        for (var i = 0; i < tr.childNodes.length; i++) {

            var td = tr.childNodes[i];

            if (td.tagName && td.tagName.toLowerCase() == 'td') {

                var anchor = td.getElementsByTagName("A")[0];

                if (anchor) {

                    var onClick = td.onmouseover;

                    td.onclick = (function (e, method) { return function (evt) { method.call(e); if (window.event) { evt = window.event } evt.cancelBubble = true; RemoveRootHover(e); __disappearAfter = 3000; Menu_Collapse(e) } })(td, onClick);

                    td.onmouseover = (function (e) { return function () { HoverRootMenu(e) } })(td);

                    anchor.style.cursor = "default";

                    var submnu = WebForm_GetElementById(td.id + "Items");

                    //if (submnu) { anchor.onclick = function () { return false } }
                    if (submnu) {
                        $(td.getElementsByTagName("Img")[0]).toggle(td.onclick, td.onmouseout);
                        //td.getElementsByTagName("Img")[0].onclick = td.onclick;
                        td.onclick = anchor.onclick;
                    }

                    td.onmouseout = (function (e) { return function () { RemoveRootHover(e) } })(td);

                }

            }

        }

    }

    function HoverRootMenu(item) {

        var node = (item.tagName.toLowerCase() == "td") ? item : item.cells[0];

        var data = Menu_GetData(item);

        if (!data) { return null; }

        var nodeTable = WebForm_GetElementByTagName(node, "table");

        if (data.staticHoverClass) {

            nodeTable.hoverClass = data.staticHoverClass;

            WebForm_AppendToClassName(nodeTable, data.staticHoverClass);

        }

        node = nodeTable.rows[0].cells[0].childNodes[0];

        if (data.staticHoverHyperLinkClass) { node.hoverHyperLinkClass = data.staticHoverHyperLinkClass; WebForm_AppendToClassName(node, data.staticHoverHyperLinkClass) }

        return node;

    }

    function RemoveRootHover(item) {

        var node = (item.tagName.toLowerCase() == "td") ? item : item.cells[0];

        var data = Menu_GetData(item);

        if (!data) { return null; }

        var nodeTable = WebForm_GetElementByTagName(node, "table");

        if (nodeTable.hoverClass) { WebForm_RemoveClassName(nodeTable, nodeTable.hoverClass) }

        node = nodeTable.rows[0].cells[0].childNodes[0];

        if (node.hoverHyperLinkClass) { WebForm_RemoveClassName(node, node.hoverHyperLinkClass) }

    }
    function WebForm_RemoveClassName(element, className) {
        var current = element.className;
        var oldLength = -1;

        if (current) {
            while (oldLength != current.length) {
                if (current.substring
          (current.length - className.length - 1,
           current.length) == ' ' + className) {
                    element.className =
             current.substring
             (0, current.length - className.length - 1);
                    oldLength = current.length;
                    current = element.className;
                    continue;
                }
                if (current == className) {
                    element.className = "";
                    oldLength = current.length;
                    current = element.className;
                    continue;
                }
                var index = current.indexOf(' ' + className + ' ');
                if (index != -1) {
                    element.className =
             current.substring
             (0, index) +
             current.substring
              (index + className.length + 2, current.length);
                    oldLength = current.length;
                    current = element.className;
                    continue;
                }
                if (current.substring
                      (0, className.length) == className + ' ') {
                    element.className =
             current.substring
                      (className.length + 1, current.length);
                }
                current = element.className;
                oldLength = current.length;
            }
        }
    }
</script>

 

后台的page_load事件中为Menu控件注册方法

    Page.ClientScript.RegisterStartupScript(Page.GetType(), "FixMenu", "FixMenu(document.getElementById('" + menuTest.ClientID + "'));", true);

项目中将Menu放到了LoginView控件的Template中,在用户未登录前无法找到Template中的Menu控件。

posted @ 2011-11-03 04:31  leon@Net  阅读(635)  评论(0编辑  收藏  举报