指定多行文本框的maxlength

Ble*_*rta 75 asp.net textbox multiline maxlength

我正在尝试使用asp:

<asp:TextBox ID="txtInput" runat="server" TextMode="MultiLine"></asp:TextBox>
Run Code Online (Sandbox Code Playgroud)

我想要一种方法来指定maxlength属性,但显然没有办法可以multiline textbox.我一直在尝试为onkeypress事件使用一些JavaScript :

onkeypress="return textboxMultilineMaxNumber(this,maxlength)"

function textboxMultilineMaxNumber(txt, maxLen) {
    try {
        if (txt.value.length > (maxLen - 1)) return false;
    } catch (e) { }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

虽然正常工作,但这个JavaScript函数的问题在于,在写入字符后,它不允许您删除和替换它们中的任何一个,这种行为是不可取的.

你有什么想法我可以在上面的代码中改变什么来避免这种或任何其他方式来绕过它?

Ale*_*gas 73

请改用正则表达式验证器.这将在客户端使用JavaScript,但也禁用JavaScript时(因为长度检查也将在服务器上执行).

以下示例检查输入的值是否介于0到100个字符之间:

<asp:RegularExpressionValidator runat="server" ID="valInput"
    ControlToValidate="txtInput"
    ValidationExpression="^[\s\S]{0,100}$"
    ErrorMessage="Please enter a maximum of 100 characters"
    Display="Dynamic">*</asp:RegularExpressionValidator>
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用更复杂的正则表达式来更好地满足您的目的.

  • 编辑帖子时傻6字符限制不能让我修复正则表达式和错误信息中的不匹配 - 必须有"请输入最多_100_个字符" (2认同)

Raú*_*Roa 40

试试这个javascript:

function checkTextAreaMaxLength(textBox,e, length)
{

        var mLen = textBox["MaxLength"];
        if(null==mLen)
            mLen=length;

        var maxLength = parseInt(mLen);
        if(!checkSpecialKeys(e))
        {
         if(textBox.value.length > maxLength-1)
         {
            if(window.event)//IE
              e.returnValue = false;
            else//Firefox
                e.preventDefault();
         }
    }   
}
function checkSpecialKeys(e)
{
    if(e.keyCode !=8 && e.keyCode!=46 && e.keyCode!=37 && e.keyCode!=38 && e.keyCode!=39 && e.keyCode!=40)
        return false;
    else
        return true;
}
Run Code Online (Sandbox Code Playgroud)

在控件上调用它像这样:

<asp:TextBox Rows="5" Columns="80" ID="txtCommentsForSearch" MaxLength='1999' onkeyDown="checkTextAreaMaxLength(this,event,'1999');"  TextMode="multiLine" runat="server"> </asp:TextBox>
Run Code Online (Sandbox Code Playgroud)

您也可以使用checkSpecialKeys函数来验证javascript实现的输入.

  • 如果你只是粘贴了大量的文本,这不起作用. (25认同)
  • 这段代码在服务器端不起作用,这使得它成为一个非常差的解决方案.来自Alex Angas的正则表达式验证器是一个更好的解决方案,真的应该是公认的答案...... (2认同)

小智 25

把事情简单化.大多数现代浏览器都支持文本区域(包括IE)上的maxlength属性,因此只需在代码隐藏中添加该属性即可.没有JS,没有Jquery,没有继承,自定义代码,没有大惊小怪,没有muss.

VB.Net:

fld_description.attributes("maxlength") = 255
Run Code Online (Sandbox Code Playgroud)

C#

fld_description.Attributes["maxlength"] = 255
Run Code Online (Sandbox Code Playgroud)

  • 这在名为“Comments”的多行文本框中对我有用:Comments.Attributes.Add("maxlength", "1000"); (在 Page_Load 事件中)。 (3认同)
  • 这是正确的解决方案 - 因为您正在解决Web控件中的错误(限制?)而不是浏览器的限制.我可能做的唯一修改是我认为属性是字符串所以"255"而不是255. (2认同)

小智 22

滚动你自己:

function Count(text) 
{
    //asp.net textarea maxlength doesnt work; do it by hand
    var maxlength = 2000; //set your value here (or add a parm and pass it in)
    var object = document.getElementById(text.id)  //get your object
    if (object.value.length > maxlength) 
    {
        object.focus(); //set focus to prevent jumping
        object.value = text.value.substring(0, maxlength); //truncate the value
        object.scrollTop = object.scrollHeight; //scroll to the end to prevent jumping
        return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

像这样打电话:

<asp:TextBox ID="foo" runat="server" Rows="3" TextMode="MultiLine" onKeyUp="javascript:Count(this);" onChange="javascript:Count(this);" ></asp:TextBox>
Run Code Online (Sandbox Code Playgroud)

  • 处理剪切和粘贴! (9认同)
  • @NickG因为'这个轮'旋转比上面的木制版更好!;) (3认同)

小智 5

使用自定义属性 maxsize="100"

<asp:TextBox ID="txtAddress" runat="server"  maxsize="100"
      Columns="17" Rows="4" TextMode="MultiLine"></asp:TextBox>
   <script>
       $("textarea[maxsize]").each(function () {
         $(this).attr('maxlength', $(this).attr('maxsize'));
         $(this).removeAttr('maxsize'); 
       });
   </script>
Run Code Online (Sandbox Code Playgroud)

这将呈现这样的效果

<textarea name="ctl00$BodyContentPlac
eHolder$txtAddress" rows="4" cols="17" id="txtAddress" maxlength="100"></textarea>
Run Code Online (Sandbox Code Playgroud)


Kri*_*her 5

HTML5发生了变化:

ASPX:

<asp:TextBox ID="txtBox" runat="server" maxlength="2000" TextMode="MultiLine"></asp:TextBox>
Run Code Online (Sandbox Code Playgroud)

C#:

if (!IsPostBack)
{
    txtBox.Attributes.Add("maxlength", txtBox.MaxLength.ToString());
}
Run Code Online (Sandbox Code Playgroud)

呈现的HTML:

<textarea name="ctl00$DemoContentPlaceHolder$txtBox" id="txtBox" maxlength="2000"></textarea>
Run Code Online (Sandbox Code Playgroud)

的元数据Attributes

摘要:获取与控件上的属性不对应的任意属性的集合(仅用于渲染)。

返回:System.Web.UI.AttributeCollection名称和值对的A。