我有一个画面,该画面有一个控件
<asp:TextBox ID="txtTeamList" runat="server" TextMode="MultiLine" Width="250px" Height="150px" TabIndex="2" MaxLength="3000"></asp:TextBox>
该控件是一个TextBox,但是设置了TextMode="MultiLine",也就是让其可以书写多行。并且设置了MaxLength="3000",是为了让其输入3000个文字后就不能在输入了。
但是,目前出现了一个问题,就是MaxLength="3000"的设置没有起作用,我输入3000个文字后仍是可以输入。如果不设置TextMode="MultiLine",设置MaxLength是起作用的,
可是设置了TextMode之后,却达不到效果。
麻烦哪位热心人可以帮忙一下。谢谢。

解决方案 »

  1.   

    找个js keypress的时候看一下总长度,多了,就截断
      

  2.   

    function isOver()
        {
           var intlen=txtTeamDetail.value.length;
           if (intlen>50)
           {
           intlen=intlen.substring(0,50);
           }
       }
    我写了这个js, 并且在最外层table中使用,如下:
    <table width="800" cellpadding="0" onkeydown="insertKey();" onkeypress="isOver();">
    可是仍是不会自动截取50位。(3000位太多,先使用一个50位进行测试。)
      

  3.   

    function isOver() 
        { 
          var intlen=txtTeamDetail.value.length; 
          if (intlen>50) 
          { 
          intlen=intlen.substring(0,50); 
          } 
       } 
    我写了这个js, 并且在最外层table中使用,如下: 
    <table width="800" cellpadding="0" onkeydown="insertKey();" onkeypress="isOver();"> 
    可是仍是不会自动截取50位。(3000位太多,先使用一个50位进行测试。)
      

  4.   

    Asp.net TextBox控件TextBoxMode设置为MultiLine,maxlength属性失效是正常的,当TextBoxMode设置为 MultiLine时,生成的前台控件是textArea,而它是没有maxlength的属性的,而<input type="text">则有此属性
    所以我们必须自己去做这部分工作,其实也很简单,加几个属性就好了,这里需要注意,用键盘输入和鼠标右键粘贴的情况。最简单的做法我是写一个自定义控件,继承于TextBox。
    大概代码如下。
    public class MulTextBox :TextBox
        {
            protected override void OnPreRender(EventArgs e)
            {
                if (this.Page != null)
                {
                    if (this.TextMode == TextBoxMode.MultiLine)
                    {
                        this.Page.ClientScript.RegisterClientScriptResource(typeof(MulTextBox), "MulTextBox.CheckFunction.js");
                        this.Attributes.Add("onmousedown", "CheckTextboxLength('" + this.ClientID + "','" + this.MaxLength + "')");
                        this.Attributes.Add("onkeyup", "CheckTextboxLength('" + this.ClientID + "','" + this.MaxLength + "')");
                        this.Attributes.Add("onmouseout", "CheckTextboxLength('" + this.ClientID + "','" + this.MaxLength + "')");
                    }
                }
                base.OnPreRender(e);
            }
            
        }javascript:
    function CheckTextboxLength(obj,maxlength)
    {
           var textObj = document.getElementById(obj);
           var len = textObj.value.length;
           if(len > maxlength)
           {
                textObj.value = textObj.value.substring(0,maxlength);
           }
    }
    这里没有使用window.clipboardData.getData("Text")是由于使用此脚本会弹出一个提示,客户体验不是很好。
      

  5.   


    <script>
    function checkTextLength(obj, length)   
    {   
        if(obj != null)   
        {   
            if(obj.value.length > length)   
            {   
                if(event.keyCode == 0)   
                  ;
                obj.value = obj.value.substr(0, length);   
            }   
        }   
    }
    </script><asp:TextBox ID="txtTeamList" runat="server" TextMode="MultiLine" Width="250px" Height="150px" TabIndex="2" MaxLength="3000" onpropertychange="checkTextLength(this, 255);"> </asp:TextBox>
      

  6.   

    谢谢yechangda您的方法,虽然我按照您提供的方法试了,但是没有起到效果,仍是可以输入,没有实现长度的限制呀。
      

  7.   

    由于多行 TextBox 最终输出的HTML 元素是 textarea, 浏览器不支持通过 maxlength 来限制可输入的长度。
    可以通过以下步骤来达到你的要求:
    1、在客户端通过js 来检查输入字符长度
    2、在服务端后台代码通过 substring 来取指定长度的字符串,这个长度一定不能大于对应数据库字段的长度。
      

  8.   

    function checkMaxInput() {
    var maxLen = 50;
    var xxx=document.getElementById("txtTeamList");
    if (xxx.value.length > maxLen)
    xxx.value=xxx.value.substr(0,50);
    }<asp:TextBox onKeyUp="checkMaxInput()" ID="txtTeamList" runat="server" TextMode="MultiLine" Width="250px" Height="150px" TabIndex="2" MaxLength="3000"> </asp:TextBox>
      

  9.   

    谢谢newdigitime你的方法,我按照你上面的例子进行书写,却不可以成功。
    function checkMaxInput() { 
    var maxLen = 50; 
    var txtTeam=document.getElementById("txtTeamDetail"); 
    if (txtTeam.value.length > maxLen) 
    txtTeam.value=txtTeam.value.substr(0,50); 
    } <asp:TextBox ID="txtTeamDetail" runat="server" Width="250px" TextMode="MultiLine"
                                                CssClass="text03" Height="150px" onKeyUp="checkMaxInput();" ></asp:TextBox>
      

  10.   

    function IsEmpty(fData)
    {
        return ((fData == null) || (fData.length == 0))
    }function IsInteger(fData)
    {
        //如果为空,返回true
        if (IsEmpty(fData))
            return true
        if ((isNaN(fData)) || (fData.indexOf(".") != -1) || (fData.indexOf("-") != -1))
            return false    return true
    }function setControlMaxLength()
    {
        var areas = document.getElementsByTagName("textarea");
        for (var i = 0; i < areas.length; i++)
        {
            if (areas[i].getAttribute("maxlength"))
            {
                if (IsInteger(areas[i].getAttribute("maxlength")))
                {
                    try
                    {
                        areas[i].addEventListener('keydown', controlMaxLength, false);
                        areas[i].addEventListener('input', controlMaxLengthByChange, false);
                    }
                    catch (e)
                    {
                        areas[i].onkeydown = controlMaxLength;
                        areas[i].onpropertychange = controlMaxLengthByChange;
                    }
                }
            }
        }
    }function controlMaxLength()
    {
        var evt = arguments[0];
        var sender;
        var iKeyCode = -1;
        if (evt)
        {
            sender = evt.target;
            iKeyCode = evt.which;
        }
        else
        {
            evt = event;
            sender = evt.srcElement;
            iKeyCode = evt.keyCode;
        }    if (!((iKeyCode == 8) || (iKeyCode == 46) || ((iKeyCode >= 33) && (iKeyCode <= 40))))
        {
            if (sender.value.length + 1 > sender.getAttribute("maxlength"))
            {
                try
                {
                    evt.preventDefault();
                }
                catch (ex)
                {
                    evt.returnValue = false;
                }
            }
        }
    }function controlMaxLengthByChange()
    {
        var sender;
        if (arguments[0])
        {
            sender = arguments[0].target;
        }
        else
        {
            sender = event.srcElement;
        }    if (sender.value.length > sender.getAttribute("maxlength"))
        {
            sender.value = sender.value.substr(0, sender.getAttribute("maxlength"));
        }
    }
      

  11.   

    然后在网页结尾处调用下 setControlMaxLength(); 方法
      

  12.   

    可以用HTML控件,然后可以换行.并控制长度.
      

  13.   

    if(navigator.userAgent.indexOf("MSIE")>0){
    document.getElementById('txt1').attachEvent("onpropertychange",txChange);
    }else if(navigator.userAgent.indexOf("Firefox")>0){
    document.getElementById('txt1').addEventListener("input",txChange,false);
    }
    function txChange(){
    var txt = document.getElementById('txt1');
    if(txt.value.length>1000) 
    txt.value=txt.value.substr(0,1000);
    只会JS解决
    作为参考
      

  14.   


    应该没问题啊.你复制我这个代码测试,保证OK<%@ Page Language="C#"%>
    <!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><title>sdfsdfs</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    </head>
    <SCRIPT LANGUAGE="JavaScript">
    function checkMaxInput() { 
    var maxLen = 50; 
    var txtTeam=document.getElementById("dtext"); 
    if (txtTeam.value.length > maxLen) 
    txtTeam.value=txtTeam.value.substr(0,50); 

    </SCRIPT>
    <body>
    <form id="gg" name="gg" METHOD="POST" runat="server">
    <asp:TextBox  width=500 height=100 id="dtext"  onKeyUp="checkMaxInput()" onKeyDown="checkMaxInput()" runat="server" TextMode="MultiLine"></asp:TextBox>
    </form>
    </body>
    </html>
      

  15.   

    谢谢大家热心的帮助,我现在已经实现我想要的效果了。解决方法如下:
    <asp:TextBox ID="txtTeamList" runat="server" TextMode="MultiLine" Width="250px" Height="150px"
                                                TabIndex="2" onkeyup="this.value = this.value.slice(0, 3000)"></asp:TextBox>
    但是我只有一分,那给yechangda吧。对于大家表示感谢。
      

  16.   

    第一次用csdn,不知道这样是否成功给yechangda分数了。