Ich versuche asp zu verwenden:
<asp:TextBox ID="txtInput" runat="server" TextMode="MultiLine"></asp:TextBox>
Ich möchte eine Möglichkeit, die maxlength
Eigenschaft anzugeben , aber anscheinend ist für a keine Möglichkeit möglich multiline textbox
. Ich habe versucht, JavaScript für das onkeypress
Ereignis zu verwenden:
onkeypress="return textboxMultilineMaxNumber(this,maxlength)"
function textboxMultilineMaxNumber(txt, maxLen) {
try {
if (txt.value.length > (maxLen - 1)) return false;
} catch (e) { }
return true;
}
Das Problem mit dieser JavaScript-Funktion besteht darin, dass Sie nach dem Schreiben von Zeichen keine dieser Zeichen löschen und ersetzen können. Dieses Verhalten ist jedoch nicht erwünscht.
Haben Sie eine Idee, was ich möglicherweise im obigen Code ändern könnte, um dies oder andere Möglichkeiten zu vermeiden, um es zu umgehen?
Antworten:
Versuchen Sie dieses 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; }
Rufen Sie auf dem Steuerelement Folgendes auf:
<asp:TextBox Rows="5" Columns="80" ID="txtCommentsForSearch" MaxLength='1999' onkeyDown="checkTextAreaMaxLength(this,event,'1999');" TextMode="multiLine" runat="server"> </asp:TextBox>
Sie können auch einfach die Funktion checkSpecialKeys verwenden, um die Eingabe in Ihre Javascript-Implementierung zu überprüfen.
quelle
Verwenden Sie stattdessen einen Validator für reguläre Ausdrücke . Dies funktioniert auf der Clientseite mit JavaScript, aber auch, wenn JavaScript deaktiviert ist (da die Längenprüfung auch auf dem Server durchgeführt wird).
Im folgenden Beispiel wird überprüft, ob der eingegebene Wert zwischen 0 und 100 Zeichen lang ist:
<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>
Es gibt natürlich komplexere Regexs, die Sie verwenden können, um Ihren Zwecken besser zu entsprechen.
quelle
[\s\S]
anstelle des einfacheren verwenden.
?.
Tour ): passt nicht zu Zeilenumbrüchen,[\s\S]
tut .halte es einfach. Die meisten modernen Browser unterstützen ein Attribut für die maximale Länge in einem Textbereich (einschließlich IE). Fügen Sie dieses Attribut einfach in CodeBehind hinzu. Kein JS, kein Jquery, keine Vererbung, kein benutzerdefinierter Code, keine Aufregung, kein Muss.
VB.Net:
fld_description.attributes("maxlength") = 255
C #
fld_description.Attributes["maxlength"] = 255
quelle
fld_description.attributes["maxlength"] = 255
gibt einen Fehler fürattributes
fld_description.Attributes["maxlength"]
Roll deinen eigenen:
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; }
Rufen Sie so an:
<asp:TextBox ID="foo" runat="server" Rows="3" TextMode="MultiLine" onKeyUp="javascript:Count(this);" onChange="javascript:Count(this);" ></asp:TextBox>
quelle
RegularExpressionValidator
Probleme können auftreten und erfordern eine Änderung von web.config. (Re: stackoverflow.com/questions/16660900/… )In HTML5 haben sich die Dinge geändert:
ASPX:
<asp:TextBox ID="txtBox" runat="server" maxlength="2000" TextMode="MultiLine"></asp:TextBox>
C #:
if (!IsPostBack) { txtBox.Attributes.Add("maxlength", txtBox.MaxLength.ToString()); }
Gerendertes HTML:
<textarea name="ctl00$DemoContentPlaceHolder$txtBox" id="txtBox" maxlength="2000"></textarea>
Die Metadaten für
Attributes
:quelle
Eine andere Möglichkeit, dies für Browser (Firefox, Chrome, Safari) zu beheben, die die maximale Länge von Textbereichen (HTML5) ohne Javascript unterstützen, besteht darin, eine Unterklasse der System.Web.UI.WebControls.TextBox-Klasse abzuleiten und die Render-Methode zu überschreiben. Fügen Sie dann in der überschriebenen Methode das Attribut maxlength hinzu, bevor Sie wie gewohnt rendern.
protected override void Render(HtmlTextWriter writer) { if (this.TextMode == TextBoxMode.MultiLine && this.MaxLength > 0) { writer.AddAttribute(HtmlTextWriterAttribute.Maxlength, this.MaxLength.ToString()); } base.Render(writer); }
quelle
Verwenden Sie das benutzerdefinierte Attribut 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>
Dies wird so gerendert
<textarea name="ctl00$BodyContentPlac eHolder$txtAddress" rows="4" cols="17" id="txtAddress" maxlength="100"></textarea>
quelle
$('#txtInput').attr('maxLength', 100);
quelle
Verwenden Sie HTML-Textbereich mit,
runat="server"
um auf der Serverseite darauf zuzugreifen. Diese Lösung hat weniger Schmerzen als die Verwendung von Javascript oder Regex.<textarea runat="server" id="txt1" maxlength="100" />
Hinweis: Um auf die
Text
Eigenschaft auf der Serverseite zuzugreifen , sollten Sietxt1.Value
anstelle von verwendentxt1.Text
quelle
Ich habe verschiedene Ansätze ausprobiert, aber jeder hatte einige Schwachstellen (dh beim Ausschneiden und Einfügen oder bei der Browserkompatibilität). Dies ist die Lösung, die ich gerade verwende:
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; } }
In diesem Fall rufe ich multilineTextBoxKeyUp bei aktivierter Taste und multilineTextBoxKeyDown bei gedrücktem Schlüssel auf:
myTextBox.Attributes.Add("onkeyDown", "multilineTextBoxKeyDown(this, event, '" + maxLength + "');"); myTextBox.Attributes.Add("onkeyUp", "multilineTextBoxKeyUp(this, event, '" + maxLength + "');");
quelle
Werfen Sie einen Blick auf diese . Die einzige Möglichkeit, dies zu lösen, ist Javascript, wie Sie es versucht haben.
BEARBEITEN: Versuchen Sie, das Ereignis in Tastendruck zu ändern.
quelle
So haben wir es gemacht (hält den gesamten Code an einem Ort):
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"/> <% TextBox1.Attributes["maxlength"] = "1000"; %>
Nur für den Fall, dass jemand 2018 noch Webformulare verwendet.
quelle
Das folgende Beispiel in JavaScript / Jquery macht das-
<telerik:RadScriptBlock ID="RadScriptBlock1" runat="server"> <script type="text/javascript"> function count(text, event) { var keyCode = event.keyCode; //THIS IS FOR CONTROL KEY var ctrlDown = event.ctrlKey; var maxlength = $("#<%=txtMEDaiSSOWebAddress1.ClientID%>").val().length; if (maxlength < 200) { event.returnValue = true; } else { if ((keyCode == 8) || (keyCode == 9) || (keyCode == 46) || (keyCode == 33) || (keyCode == 27) || (keyCode == 145) || (keyCode == 19) || (keyCode == 34) || (keyCode == 37) || (keyCode == 39) || (keyCode == 16) || (keyCode == 18) || (keyCode == 38) || (keyCode == 40) || (keyCode == 35) || (keyCode == 36) || (ctrlDown && keyCode == 88) || (ctrlDown && keyCode == 65) || (ctrlDown && keyCode == 67) || (ctrlDown && keyCode == 86)) { event.returnValue = true; } else { event.returnValue = false; } } } function substr(text) { var txtWebAdd = $("#<%=txtMEDaiSSOWebAddress1.ClientID%>").val(); var substrWebAdd; if (txtWebAdd.length > 200) { substrWebAdd = txtWebAdd.substring(0, 200); $("#<%=txtMEDaiSSOWebAddress1.ClientID%>").val(''); $("#<%=txtMEDaiSSOWebAddress1.ClientID%>").val(substrWebAdd); } }
quelle
Dieses Snippet hat in meinem Fall funktioniert. Ich suchte nach der Lösung und dachte daran, diese zu schreiben, damit sie jedem zukünftigen Leser helfen kann.
ASP
<asp:TextBox ID="tbName" runat="server" MaxLength="250" TextMode="MultiLine" onkeyUp="return CheckMaxCount(this,event,250);"></asp:TextBox>
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 Answer hat bei mir beim Kopieren / Einfügen funktioniert. während dies tut.
quelle
$("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(); } } } });
quelle
Sie können die maximale Länge für das mehrzeilige Textfeld in pageLoad Javascript Event angeben
function pageLoad(){ $("[id$='txtInput']").attr("maxlength","10"); }
Ich habe die maximale Länge Eigenschaft gesetzt TxtInput mehrzeiliges Textfeld auf 10 Zeichen in pageload () JavaScript - Funktion
quelle
Dies ist die gleiche Antwort wie bei @ KeithK, jedoch mit einigen weiteren Details. Erstellen Sie zunächst ein neues Steuerelement basierend auf TextBox.
using System.Web.UI; using System.Web.UI.WebControls; namespace MyProject { public class LimitedMultiLineTextBox : System.Web.UI.WebControls.TextBox { protected override void Render(HtmlTextWriter writer) { this.TextMode = TextBoxMode.MultiLine; if (this.MaxLength > 0) { writer.AddAttribute(HtmlTextWriterAttribute.Maxlength, this.MaxLength.ToString()); } base.Render(writer); } } }
Beachten Sie, dass der obige Code den Textmodus immer auf mehrzeilig setzt.
Um dies nutzen zu können, müssen Sie es auf der aspx-Seite registrieren. Dies ist erforderlich, da Sie mit TagPrefix darauf verweisen müssen. Andernfalls wird die Kompilierung über benutzerdefinierte generische Steuerelemente beschwert.
<%@ Register Assembly="MyProject" Namespace="MyProject" TagPrefix="mp" %> <mp:LimitedMultiLineTextBox runat="server" Rows="3" ...
quelle
Nahezu alle modernen Browser unterstützen jetzt die Verwendung des Attributs maxlength für Textbereichselemente. (https://caniuse.com/#feat=maxlength)
Um das Attribut maxlength in eine mehrzeilige TextBox aufzunehmen, können Sie die Attributes-Auflistung im Code dahinter wie folgt ändern:
txtTextBox.Attributes["maxlength"] = "100";
Wenn Sie den Code dahinter nicht verwenden müssen, um dies anzugeben, können Sie einfach ein benutzerdefiniertes Steuerelement erstellen, das von TextBox abgeleitet ist:
public class Textarea : TextBox { public override TextBoxMode TextMode { get { return TextBoxMode.MultiLine; } set { } } protected override void OnPreRender(EventArgs e) { if (TextMode == TextBoxMode.MultiLine && MaxLength != 0) { Attributes["maxlength"] = MaxLength.ToString(); } base.OnPreRender(e); } }
quelle
MaxLength
wird jetzt ab .NET 4.7.2 unterstützt. Solange Sie Ihr Projekt auf .NET 4.7.2 oder höher aktualisieren, funktioniert es automatisch.Sie können dies in den Versionshinweisen hier sehen - speziell:
quelle