65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET 中文本框的客户端缩放窗口

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (4投票s)

2010年9月23日

CPOL

1分钟阅读

viewsIcon

26324

使用 JavaScript 为 ASP.NET 文本框创建客户端缩放窗口

引言

文本框服务器控件旁边的图像按钮会启动一个 div 窗口,显示 textbox 的内容。该窗口还允许用户编辑内容并将其粘贴回 textbox。所有这些操作都在客户端进行,无需回发。

img.JPG

背景

许多 Web 开发人员喜欢将他们的 ASP.NET 服务器文本框控件包装到用户控件中,这些控件包括验证、标签、常见问题解答说明等。用户要求的一个功能是,通过一个大尺寸的可滚动弹出窗口查看 textbox 的内容,并能够在客户端编辑和提交内容。在某些情况下,多行 textbox 可能不够用。

Using the Code

首先在 aspx 代码中添加你的 textbox 和图像按钮,并将它们紧挨着放置

<div style="float:left"><asp:TextBox ID="txt" runat="server" Width="200px" /></div>
<div style="float:left">
<img alt="zoom text" id="imgZoom" runat="server" style="cursor:pointer;" /></div>	

接下来,将 DIV 弹出窗口添加到 aspx 页面。默认情况下,此窗口保持隐藏状态。这个 DIV 包含一个多行 textbox 来保存内容,一个提交按钮将更改发布回父 textbox,一个取消按钮用于在不进行任何更改的情况下关闭弹出窗口,以及一个隐藏的输入框来保存父 textbox 的 ID。

<div id="divZoom" style="z-index:1000;" style="font-size:smaller;
	font-family:Arial;position:absolute;top:0; left:8;visibility:hidden;
	background-color:#C0C0C0;padding:3px 3px 3px 3px;border:solid 1px black;">
    <asp:TextBox runat="server" ID="txtZoom" TextMode="MultiLine" Wrap="false" 
	Width="400px" Height="300px"></asp:TextBox><br />
    <button id="btnZoomSubmit" onclick="HideZoom(true);return false;" 
	style="cursor:hand;">Submit</button>&nbsp;<button id="btnZoomCancel" 
	onclick="HideZoom(false);return false;" style="cursor:hand;">Cancel</button>    
    <input type="hidden" id="txtid" name="txtname" value="txtvalue" />
</div>   

在页面预渲染方法中,根据 textbox 的启用/只读状态,将 JavaScript 调用添加到 imagebutton。以下是我使用的两个图像 - 一个用于启用状态,另一个用于禁用状态的 textbox

启用状态的 textbox,显示此图像: txtzoom.png

禁用状态的 textbox,显示此图像: txtzoomdisabled.PNG

 private void Page_PreRender(object sender, System.EventArgs e)
 {      
        if (txt.Enabled && !txt.ReadOnly)
        {   //add onclick call
            imgZoom.Attributes.Add("onclick", "ShowZoomPopup('" + txt.ClientID + "');");
            imgZoom.Src = "../images/txtzoom.png";
        }
        else
        {   //remove onclick call
            imgZoom.Attributes.Add("onclick", ""); 
            imgZoom.Src = "../images/txtzoomdisabled.png";     
        }
}		 

这部分代码放在 aspx 的 JavaScript 部分

<script language="JavaScript" type="text/javascript" >   

        function ShowZoomPopup(txtboxid) {
            
            //GET THE TEXTBOX VALUE
            var txtbox = document.getElementById(txtboxid);
            var strTextBoxValue = document.getElementById(txtboxid).value;
            
            //SET THE ZOOM PANEL
            var hp = document.getElementById("divZoom");
            hp.style.visibility = "Visible";
            hp.style.top = getAbsoluteTop(txtbox) + 'px';
            hp.style.left = (getAbsoluteLeft(txtbox) + 2) + 'px';
            txtZoom = document.getElementById('ctl00_txtZoom');
            txtZoom.value = strTextBoxValue;
            
            //SET THE HIDDEN FIELD WITH TXT ID
            document.getElementById('txtid').value = txtboxid;
        }
	function HideZoomPopup(status) {
	    //IF TRUE (SUBMIT BUTTON WAS CLICKED i.e. COPY DATA TO TEXTBOX)
	    //FALSE MEANS CANCEL BUTTON WAS CLICKED.
            if (status) {
		//GET HIDDEN CONTROLS DATA
                var txtboxid = document.getElementById('txtid').value;
                document.getElementById(txtboxid).value = 
		document.getElementById('ctl00_txtZoom').value;     
            }
            //SET THE ZOOM PANEL
            var hp = document.getElementById("divZoom");
            hp.style.visibility = "Hidden";
        }
        function getAbsoluteLeft(objectId) {
            o = objectId; 
            var objwidth = o.offsetWidth;
            oLeft = o.offsetLeft;           
            while (o.offsetParent != null) {   
                oParent = o.offsetParent;    
                oLeft += oParent.offsetLeft;
                o = oParent;
            }

            return oLeft;
        }

        function getAbsoluteTop(objectId) {
	        o = objectId;
	        oTop = o.offsetTop  ;          
	        while(o.offsetParent!=null) { 
		        oParent = o.offsetParent;  
		        oTop += oParent.offsetTop; 
		        o = oParent;
	        }

	        return oTop;
        } 
</script> 

就是这样!

历史

  • 2010 年 9 月 23 日:初始发布
© . All rights reserved.