zoukankan      html  css  js  c++  java
  • 重写 DropDownList !

    重写 DropwnDownList 服务器端代码:
        [DefaultProperty("ID")]
        [ToolboxData(
    @"<{0}:DfSelect runat=""server""></{0}:DfSelect>")]
        
    public partial class DfSelect : DropDownList, INamingContainer
        
    {
            
    protected override void Render(HtmlTextWriter writer)
            
    {
                
    string strSelValue = this.SelectedValue ;
                
    string strSelText = this.SelectedItem.Text;
                
    string strAttrs = "";


                
    foreach (string key in this.Attributes.Keys)
                
    {
                    strAttrs 
    +=" " + key + @"=""" + this.Attributes[key] + @""" ";
                }


                
    string strSelCon = string.Format(@"<span value=""{0}"" {2} onclick=""javascript: _btnMySelClick(this);"" onmouseover=""javascript: _btnMySelOver(this) ;"" onmouseout=""javascript: _btnMySelOut(this);"">
    {1}<label style=""font-family: Wingdings 3;font-size:11px; visibility: hidden"">q</label></span>
    ",
                    strSelValue, strSelText , strAttrs);

                writer.Write(
    @"<div id=""" + this.ClientID + @""" class=""DfSelect"" >" + strSelCon );
                writer.Write(
    @"<span style=""display:none"" class=""DfSelect_Options"" ondeactivate=""javascript: _OptDeactivate(this);"" onblur=""javascript: _OptDeactivate(this);"" >");
                
    foreach (ListItem item in this.Items)
                
    {
                    writer.Write(
    @"<label style=""100%;position: absolute;"" onmouseover=""javascript: _OptOver(this);"" value=""" + item.Value + @""" >" + item.Text + @"</label><br/>");
                }

                writer.Write(
    "</span>");
                
    //this.Style["display"] = "none";
                
    //base.Render(writer);
                writer.Write("</div>");
            }

        }


    相应的客户端脚本如下:
    function _GetPreviousSibling(obj)
    {
        
    if (obj == null || obj == undefined ) obj = event.srcElement ;
        
    var _theCon ;
        
    if ( obj.previousSibling == null ) return null ;
        
    if ( obj.previousSibling.nodeType == 1 )  _theCon = obj.previousSibling ; 
        
    else _theCon= obj.previousSibling.previousSibling ;
        
        
    return _theCon ;
    }

    function _GetNextSibling(obj)
    {
        
    if (obj == null || obj == undefined ) obj = event.srcElement ;
        
    var _theCon ;
        
    if ( obj.nextSibling == null ) return null ;
        
    if ( obj.nextSibling.nodeType == 1 )  _theCon = obj.nextSibling ; 
        
    else _theCon= obj.nextSibling.nextSibling ;
        
    return _theCon ;
    }

    function _btnMySelClick(obj)
    {
        
    if (obj == null || obj == undefined ) obj = event.srcElement ;
        
    var _theConStyle = _GetNextSibling(obj) ; 
        
    if ( _theConStyle.style.display == "none" ) 
        
    {
            _theConStyle.style.display 
    = "inline"
            _theConStyle.style.cursor 
    = "default";
            _theConStyle.style.position 
    = "absolute";
            
    var rect = obj.getBoundingClientRect() ;
            _theConStyle.style.top 
    = rect.bottom - obj.offsetTop;
            _theConStyle.style.left 
    = rect.left -obj.offsetLeft ;
    //        _theConStyle.style.top = rect.bottom - rect.top ;
    //
            _theConStyle.style.left = 0 ;
            _theConStyle.style.width = obj.getBoundingClientRect().right   -  rect.left ; 
            
            
            _theConStyle.focus();
        }

        
    else _theConStyle.style.display = "none";
        
    }


    function _OptDeactivate(obj)
    {
        
    if (obj == null || obj == undefined ) obj = event.srcElement ;
        
    var _theConStyle = obj ; 
        _theConStyle.style.display 
    = "none";

        _btnMySelOut( _GetPreviousSibling ( obj ) ) ;
    }


    function _btnMySelOver(obj)
    {
        
    if (obj == null || obj == undefined ) obj = event.srcElement ;
        
    var btnFlag = obj.getElementsByTagName("label")[0] ;
        btnFlag.style.visibility 
    = "visible" ;
        obj.style.cursor 
    = "default" ;
        obj.style.borderWidth 
    = "1px" ;
        obj.style.borderColor
    ="#D7D7D7";
        obj.style.borderStyle
    ="solid";
    }

    function _btnMySelOut(obj)
    {
        
    if (obj == null || obj == undefined ) obj = event.srcElement ;
        
    var btnFlag = obj.getElementsByTagName("label")[0] ;
        
    var _theConStyle = _GetNextSibling(obj) ; 
        
    if ( _theConStyle == null || _theConStyle.style.display == "none" ) 
        
    {
            btnFlag.style.visibility 
    = "hidden" ;
            obj.style.borderWidth 
    = "0px" ;
        }

    }



    function _OptOver(obj)
    {
        
    if (obj == null || obj == undefined ) obj = event.srcElement ;
        
        
    if ( obj.parentNode.OverNode != null )
        
    {
            obj.parentNode.OverNode.style.backgroundColor 
    = "" ;
        }

        obj.style.backgroundColor
    ="red";
        obj.parentNode.OverNode 
    = obj ;
        obj.parentNode.focus();
        
    }



    用另一种思路:把原来的Select暂时 隐藏起来.
        [DefaultProperty("ID")]
        [ToolboxData(
    @"<{0}:DfSelect runat=""server""></{0}:DfSelect>")]
        
    public partial class DfSelect : DropDownList, INamingContainer
        
    {
            
    protected override void Render(HtmlTextWriter writer)
            
    {
                
    string strSelValue = this.SelectedValue ;
                
    string strSelText = this.SelectedItem.Text;
                
    string strAttrs = "";

                writer.Write(
    @"<script language=""javascript"" type=""text/javascript"">
    function _GetPreviousSibling(obj)
    {
        if (obj == null || obj == undefined ) obj = event.srcElement ;
        var _theCon ;
        if ( obj.previousSibling == null ) return null ;
        if ( obj.previousSibling.nodeType == 1 )  _theCon = obj.previousSibling ; 
        else _theCon= obj.previousSibling.previousSibling ;
        
        return _theCon ;
    }
    function _GetNextSibling(obj)
    {
        if (obj == null || obj == undefined ) obj = event.srcElement ;
        var _theCon ;
        if ( obj.nextSibling == null ) return null ;
        if ( obj.nextSibling.nodeType == 1 )  _theCon = obj.nextSibling ; 
        else _theCon= obj.nextSibling.nextSibling ;
        return _theCon ;
    }


    function _btnMySelOver(obj)
    {
        if (obj == null || obj == undefined ) obj = event.srcElement ;
        var sel = _GetNextSibling( obj) ;
        sel.style.display = ""inline"" ;
        sel.style.position = ""absolute"";
        var rect = obj.getBoundingClientRect() ;
        sel.style.top = rect.top - obj.offsetTop;
        sel.style.left = rect.left -obj.offsetLeft ;
    }

    function _btnMySelChange(obj)
    {
        if (obj == null || obj == undefined ) obj = event.srcElement ;
        var viw = _GetPreviousSibling(obj) ;
        viw.style.display = ""inline"" ;
        viw.value = obj.value ;
        viw.innerText = obj.options[ obj.selectedIndex].text;
        obj.style.display = ""none"" ;
    }

    function _btnMySelOut(obj)
    {
        if (obj == null || obj == undefined ) obj = event.srcElement ;
        obj.style.display = ""none"" ;
    }</script>
    ") ;

                
    foreach (string key in this.Attributes.Keys)
                
    {
                    strAttrs 
    +=" " + key + @"=""" + this.Attributes[key] + @""" ";
                }


                
    string strSelCon = string.Format(@"<span value=""{0}"" {2}  onmouseover=""javascript: _btnMySelOver(this) ;"">
    {1}<label style=""font-family: Wingdings 3;font-size:11px; visibility: hidden"">q</label></span>
    ",
                    strSelValue, strSelText , strAttrs);

                writer.Write(
    @"<div id=""" + this.ClientID + @""" class=""DfSelect"">" + strSelCon );
                
    this.Style["display"= "none";
                
    this.Attributes["onchange"= @"javascript: _btnMySelChange(this);";
                
    this.Attributes["onmouseout"= @"javascript: _btnMySelOut(this);"
                
    base.Render(writer);
                writer.Write(
    "</div>");
            }

        }
    alarm   作者:NewSea     出处:http://newsea.cnblogs.com/    QQ,MSN:iamnewsea@hotmail.com

      如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。
  • 相关阅读:
    【论文阅读-Embedding】《GloVe: Global Vectors for Word Representation》
    机器学习的问题总结
    预算平滑
    ML基础番外篇-距离度量
    vim配置使用
    强化学习 Note
    强化学习(David Silver)9:探索与利用
    强化学习(David Silver)8:集成学习和计划
    强化学习(David Silver)7:策略梯度算法
    数学基础01-最优化(梯度下降法、牛顿法、拟牛顿法等)
  • 原文地址:https://www.cnblogs.com/newsea/p/1100085.html
Copyright © 2011-2022 走看看