新建一个名为TextArea的js文件;在里面键入如下代码:
   
function doKeydown(control)
{
    var maxLength = control.attributes["maxLength"].value;
    var value = control.value;
    maxLength = parseInt(maxLength);
   
    if(maxLength && value.length > maxLength-1)
    {   
       if(event.keyCode!=8)//禁用除退格键外的所有键
       {
          onfocus=control.blur();
          event.returnValue = false; 
       }   
    }
}

//通过doKeyup事件解决doKeydown事件不能控制中文输入的长度的问题
function doKeyup(control)
{
   var maxLength = control.attributes["maxLength"].value;
   var value = control.value;
   maxLength = parseInt(maxLength); 
  
   if(maxLength && value.length > maxLength-1)
   {   
      value=value.substr(0,maxLength);
      control.value=value;
      onfocus=control.blur();//超长时取消焦点 禁止输入
   }     
}

//若剪贴板的内容超过指定长度,则取消复制
function doBeforePaste(control)
{
    var maxLength = control.attributes["maxLength"].value;
     
    if(maxLength)
    {
        event.returnValue = false;
    }
}

//复制时,截取限定长度的文本内容
function doPaste(control)
{
    var maxLength = control.attributes["maxLength"].value;
    var value = control.value;
   
    if(maxLength)
    {
          event.returnValue = false;
          maxLength = parseInt(maxLength);
          var area = control.document.selection.createRange();
          var iInsertLength = maxLength - value.length + area.text.length;
          var content= window.clipboardData.getData("Text").substr(0,iInsertLength);
          oTR.text = content;
     }
}


   自定义文本控件部分:
  
   添加一个名为TextArea的自定义控件,该类继承Textbox;并做如下修改:
  
   public class TextArea : TextBox
    {
        /// <summary>
        /// 通过重写PreRender加入自定义js脚本
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPreRender(EventArgs e)
        {
            if (MaxLength > 0 && TextMode == TextBoxMode.MultiLine)
            {
                //通过添加js脚本事件处理文本框的复制和输入
                Attributes.Add("onkeyup", "doKeyup(this);");
                Attributes.Add("onkeydown", "doKeydown(this);");
                Attributes.Add("onbeforepaste", "doBeforePaste(this);");
                Attributes.Add("onpaste", "doPaste(this);");

                // Add attribute for access of maxlength property on client-side
                Attributes.Add("maxLength", this.MaxLength.ToString());
                this.ToolTip = "最多只能输入" + MaxLength.ToString() + "字";// 提醒用户输入长度有限制

                //向客户端注册该脚本
                if (!Page.ClientScript.IsClientScriptIncludeRegistered("TextArea"))
                {
                    Page.ClientScript.RegisterClientScriptInclude("TextArea", ResolveClientUrl                    ("~/js/TextArea.js"));
                }
            }
            base.OnPreRender(e);
        }
    }

 

Posted on 2007-11-19 16:39 Enzo 阅读(2002) 评论(9)  编辑 收藏 所属分类: Dev Logs

Feedback

#1楼    回复  引用    

2007-11-19 20:18 by henq [未注册用户]
有用,顶下

#2楼    回复  引用  查看    

2007-11-19 21:00 by Ariel Y.      
还有就是webForm的Textbox多行模式设置最大长度无效,而windowform的却可以,也不知如此设计是何用意。

WebForm和WinForm根本就不是一个东西,完全没有可比性

#3楼    回复  引用  查看    

2007-11-20 00:50 by Cat Chen      
这是因为你不理解底层的HTML以及有关标准。我承认ASP.NET这样高度的封装,应该尽力做到你不需要了解底层,但事实上理解底层有助于你解决更多实际问题。

单行的TextBox,呈现为<input type="text" />,根据标准,它可以通过属性设置最大收入长度。因为这时标准里规定的,也不是一个难以实现的规定,所以浏览器都内置支持了。

多行的TextBox,呈现为<textarea></textarea>,没有上述类似的标准,自然没有浏览器额外增加一个这样的支持。

你真正需要领会的,不是MS的用意,而是底层的HTML标准以及制定这套标准的用意。

#4楼    回复  引用    

2007-11-20 08:38 by 小强111 [未注册用户]
@Cat Chen
同意....

#5楼    回复  引用    

2007-11-20 09:23 by 天天1 [未注册用户]
好笑的Microsoft Bug

#6楼    回复  引用    

2007-11-20 09:34 by hahawa [未注册用户]
@Ariel Y.
@Cat Chen
谢谢你们的信息

#7楼    回复  引用  查看    

2007-11-20 09:35 by Clark Zheng      
@Cat Chen
果然高手

#8楼 [楼主]   回复  引用  查看    

2007-11-20 09:40 by Enzo      
--引用--------------------------------------------------
hahawa: @Ariel Y.
@Cat Chen
谢谢你们的信息
--------------------------------------------------------
也谢谢你们的指导.

这方面的知识,我确实有所欠缺,承蒙提醒,我会抓紧补上的.
谢了.

#9楼    回复  引用    

2008-01-09 00:15 by dikongpulucnblogs [未注册用户]
很多一开始就学.net的根本就不知道html是什么东西了 呵呵

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-09 12:57 编辑过


相关链接: