Как установить maxlength для многострочного TextBox?

При использовании MultiLine TextBox (который генерирует TextArea) настройка свойства MaxLength не влияет. Какое лучшее обходное решение? Я хотел бы получить базовую, предполагаемую функциональность с минимальным уродливым javascript и т.д. Просто запретите пользователю вводить больше, чем максимальное количество символов.

Ответ 1

Если вы хотите сообщить пользователю, превысил ли он количество символов, когда он пишет, вы можете использовать функцию javascript, прикрепленную к событию нажатия клавиши. Эта функция проверяет длину ввода и отменяет рендеринг символов, если достигнут максимальный уровень.

Другим вариантом является использование элемента управления RegularExpressionValidator для проверки ввода для отправки.

На мой взгляд, первый вариант намного лучше.

Я не добавляю никакого кода, так как Google полна примеров на любой вкус, это очень распространенная задача.

Здесь у вас есть пример поиска, который может помочь.

Ответ 2

Если вам не нравятся более старые браузеры (см. поддерживаемые браузеры здесь),
вы можете установить MaxLength как обычно,

<asp:TextBox ID="txt1" runat="server" TextMode="MultiLine" MaxLength="100" />

и заставить его распечатываться в HTML

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
    txt1.Attributes.Add("maxlength", txt1.MaxLength.ToString());
}

Ответ 3

Эй, пукипуки, вы можете сделать следующее:

<asp:TextBox ID="txtValue" runat="server"TextMode="MultiLine" Rows="10"Columns="50"></asp:TextBox>

 $(document).ready(function(){ 
 var MaxLength = 250; 
 $('#txtValue').keypress(function(e) 
 { 
     if ($(this).val().length >= MaxLength)
 {    
    e.preventDefault();
 }  
 });});

Вы можете увидеть больше в этой следующей ссылке: http://jquerybyexample.blogspot.in/2010/10/set-max-length-for-aspnet-multiline.html

Ответ 4

Здесь кросс-браузерное решение:

<asp:TextBox TextMode="MultiLine" runat="server" ID="txtPurpose" Columns="50" Rows="2" onkeypress="return isokmaxlength(event,this,255);" ClientIDMode="static"></asp:TextBox>

Javascript:

function isokmaxlength(e,val,maxlengt) {
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode

    if (!(charCode == 44 || charCode == 46 || charCode == 0 || charCode == 8 || (val.value.length < maxlengt))) {
        return false;
    }
}

Вам нужно подумать о копировании и вставке. Это немного сложно, я просто отключил его с помощью JQuery. Но вы можете создать свою собственную функцию для более сложной проверки. Но в моем случае копирование и вставка не разрешены.

Jquery для отключения копирования и вставки:

jQuery(function ($) {

    $("#txtPurpose").bind({
        paste: function (e) {
            e.preventDefault();
        }
    });

}); 

Ответ 5

Если вы используете привязку объекта модели к этому текстовому полю, вы можете использовать атрибуты DataAnnotations, чтобы установить максимальную длину этого свойства. Я основанный на MVC об этом, но он должен работать и для ASP.NET!

Таким образом, вы не входите в какой-либо Javascript или не устанавливаете что-либо в разметке.

Ответ 6

Попробуйте это.

    Dim script As String = ""

    script = script + " <script type='text/javascript'> function CheckLength(obj) {"
    script = script + "  var object = document.getElementById(obj);"
    script = script + " if (object.value.length > 5) {"
    script = script + "     object.focus();"
    script = script + "      object.value = object.value.substring(0, 5); "
    script = script + "      object.scrollTop = object.scrollHeight; "
    script = script + "      return false;"
    script = script + "   }"
    script = script + "   return true;"
    script = script + "   }</script>"


    Dim b As New TextBox()
    b.ID = "btnSomeButton"
    b.TextMode = TextBoxMode.MultiLine
    Mypanel.Controls.Add(b)
    b.Attributes.Add("onkeyup", "return CheckLength('" & b.ClientID & "');")

    Page.ClientScript.RegisterStartupScript(Page.GetType(), "key", script, False)