Указание максимальной длины для многострочного текстового поля

Я пытаюсь использовать asp:

 

Я хочу, чтобы указать свойство maxlength , но, видимо, нет multiline textbox . Я пытаюсь использовать JavaScript для события onkeypress :

 onkeypress="return textboxMultilineMaxNumber(this,maxlength)" function textboxMultilineMaxNumber(txt, maxLen) { try { if (txt.value.length > (maxLen - 1)) return false; } catch (e) { } return true; } 

Работая хорошо, проблема с этой функцией JavaScript заключается в том, что после написания символов она не позволяет удалять и заменять любую из них, это поведение нежелательно.

У вас есть представление, что я могу изменить в приведенном выше коде, чтобы избежать этого или каких-либо других способов обойти его?

попробуйте этот 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; } 

На контроле вызовите его вот так:

   

Вы также можете просто использовать функцию checkSpecialKeys для проверки ввода в вашей реализации javascript.

Вместо этого используйте валидатор регулярных выражений . Это будет работать на стороне клиента с использованием JavaScript, но также, когда JavaScript отключен (так как проверка длины будет также выполняться на сервере).

В следующем примере проверяется, что введенное значение составляет от 0 до 100 символов:

 * 

Есть, конечно, более сложные регулярные выражения, которые вы можете использовать, чтобы лучше соответствовать вашим целям.

Бросьте свои собственные:

 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; } 

Вызов:

  

будь проще. Большинство современных браузеров поддерживают атрибут maxlength в текстовой области (включая IE), поэтому просто добавьте этот атрибут в код. Нет JS, нет JQuery, нет наследования, пользовательский код, нет суеты, нет muss.

VB.Net:

 fld_description.attributes("maxlength") = 255 

C #

 fld_description.attributes["maxlength"] = 255 

использовать пользовательский атрибут maxsize = “100”

   

это будет выглядеть так

  

Еще один способ исправить это для этих браузеров (Firefox, Chrome, Safari), поддерживающих maxlength в textareas (HTML5) без javascript, – это получить подclass classа System.Web.UI.WebControls.TextBox и переопределить метод Render. Затем в переопределенном методе добавьте атрибут maxlength перед рендерингом как обычно.

 protected override void Render(HtmlTextWriter writer) { if (this.TextMode == TextBoxMode.MultiLine && this.MaxLength > 0) { writer.AddAttribute(HtmlTextWriterAttribute.Maxlength, this.MaxLength.ToString()); } base.Render(writer); } 
 $('#txtInput').attr('maxLength', 100); 

Я пробовал разные подходы, но у каждого были некоторые слабые стороны (то есть с разрезом и вставкой или совместимость с браузером). Это решение, которое я использую прямо сейчас:

 function multilineTextBoxKeyUp(textBox, e, maxLength) { if (!checkSpecialKeys(e)) { var length = parseInt(maxLength); if (textBox.value.length > length) { textBox.value = textBox.value.substring(0, maxLength); } } } function multilineTextBoxKeyDown(textBox, e, maxLength) { var selectedText = document.selection.createRange().text; if (!checkSpecialKeys(e) && !e.ctrlKey && selectedText.length == 0) { var length = parseInt(maxLength); if (textBox.value.length > length - 1) { if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; } } } } function checkSpecialKeys(e) { if (e.keyCode != 8 && e.keyCode != 9 && e.keyCode != 33 && e.keyCode != 34 && e.keyCode != 35 && e.keyCode != 36 && e.keyCode != 37 && e.keyCode != 38 && e.keyCode != 39 && e.keyCode != 40) { return false; } else { return true; } } 

В этом случае я вызываю multilineTextBoxKeyUp на key up и multilineTextBoxKeyDown при нажатии клавиши:

 myTextBox.Attributes.Add("onkeyDown", "multilineTextBoxKeyDown(this, event, '" + maxLength + "');"); myTextBox.Attributes.Add("onkeyUp", "multilineTextBoxKeyUp(this, event, '" + maxLength + "');"); 

Посмотрите на это . Единственный способ решить эту проблему – javascript, как вы пробовали.

EDIT: попробуйте изменить событие нажатием клавиши.

Используйте HTML textarea с runat="server" для доступа к серверу. Это решение имеет меньшую боль, чем использование javascript или регулярного выражения.

  

Примечание. Чтобы получить доступ к Text txt1.Value стороне сервера, вы должны использовать txt1.Value вместо txt1.Text

В HTML5 все изменилось:

ASPX:

  

C #:

 if (!IsPostBack) { txtBox.Attributes.Add("maxlength", txtBox.MaxLength.ToString()); } 

Выделенный HTML:

  

Метаданные для Attributes :

Сводка: Получает коллекцию произвольных атрибутов (только для рендеринга), которые не соответствуют свойствам элемента управления.

Возвращает: A System.Web.UI.AttributeCollection пар имен и значений.

Следующий пример в JavaScript / Jquery будет делать это –

   

Этот fragment работал в моем случае. Я искал решение и думал написать это, чтобы он мог помочь любому будущему читателю.

ASP

  

Java Script

 function CheckMaxCount(txtBox,e, maxLength) { if(txtBox) { if(txtBox.value.length > maxLength) { txtBox.value = txtBox.value.substring(0, maxLength); } if(!checkSpecialKeys(e)) { return ( txtBox.value.length <= maxLength) } } } 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; } 

@ Raúl Roa Ответ работал для меня в случае копирования / вставки. в то время как это происходит.

 $("textarea[maxlength]").on("keydown paste", function (evt) { if ($(this).val().length > $(this).prop("maxlength")) { if (evt.type == "paste") { $(this).val($(this).val().substr(0, $(this).prop("maxlength"))); } else { if ([8, 37, 38, 39, 40, 46].indexOf(evt.keyCode) == -1) { evt.returnValue = false; evt.preventDefault(); } } } }); 

Вот как мы это сделали (держит весь код в одном месте):

  <% TextBox1.Attributes["maxlength"] = "1000"; %> 

На всякий случай кто-то еще использует веб-формы в 2018 году.

вы можете указать максимальную длину для многострочного текстового поля в событии Javascript на странице Load

 function pageLoad(){ $("[id$='txtInput']").attr("maxlength","10"); } 

Я установил свойство max length txtInput многострочного текстового поля на 10 символов в функции pageLoad () Javascript

Давайте будем гением компьютера.