Wie die maximale Anzahl von Zeichen, die in ein HTML <textarea>
eingegeben werden können? Ich suche nach einer Cross-Browser-Lösung.Maximale Länge für HTML <textarea>
Antwort
Die TEXTAREA
-Tag nicht über ein MAXLENGTH
den Weg Attribut, das ein INPUT
Tag tut, zumindest nicht in den meisten Standard-Browsern. Eine sehr einfache und effektive Möglichkeit, die Anzahl der Zeichen zu begrenzen, die sein kann in ein TEXTAREA
-Tag eingegeben ist:
<textarea onKeyPress="return (this.value.length < 50);"></textarea>
Hinweis:onKeyPress
, wird eine beliebige Taste drücken, um zu verhindern, eine beliebige Tasteeinschließlich der Rücktaste.
Dies funktioniert, weil der boolesche Ausdruck die Feldlänge vergleicht, bevor das neue Zeichen zu der maximalen Länge hinzugefügt wird false
wenn nicht. Wenn von den meisten Ereignissen false zurückgegeben wird, wird die Standardaktion abgebrochen. Wenn also die aktuelle Länge bereits 50 (oder mehr) ist, gibt der Handler den Wert false zurück, die Aktion KeyPress
wird abgebrochen und das Zeichen wird nicht hinzugefügt.
Ein Haar in der Suppe ist die Möglichkeit, das Einfügen in eine TEXTAREA
, die nicht KeyPress
Ereignis verursacht diese Prüfung zu schießen, zu umgehen. Internet Explorer 5+ enthält ein onPaste
Ereignis, dessen Handler die Prüfung enthalten kann. Beachten Sie jedoch, dass Sie auch berücksichtigen müssen, wie viele Zeichen in der Zwischenablage warten, um zu wissen, ob die Summe über das Limit hinaus geht oder nicht. Glücklicherweise enthält IE auch eine Zwischenablage Objekt aus dem Fensterobjekt. 1 So:
<textarea onKeyPress="return (this.value.length < 50);"
onPaste="return ((this.value.length +
window.clipboardData.getData('Text').length) < 50);"></textarea>
Auch das onPaste
Ereignis und clipboardData
Objekt ist IE 5+ nur. Für eine browserübergreifende Lösung müssen Sie nur einen OnChange
oder -Handler verwenden, um die Länge zu prüfen und beliebig zu verarbeiten (den Wert stillschweigend abschneiden, den Benutzer benachrichtigen usw.). Leider fängt dies den Fehler nicht so ein, wie es gerade passiert, nur wenn der Benutzer versucht, das Feld zu verlassen, was nicht ganz so freundlich ist.
Außerdem gibt es eine weitere Möglichkeit, hier ein fertiges Skript auch Sie in Ihrer Seite umfassen könnten:
http://cf-bill.blogspot.com/2005/05/textarea-maxlength-revisited.html
HTML5 ermöglicht jetzt maxlength
attribute on <textarea>
.
Es wird von allen Browsern außer IE < = 9 und iOS Safari 8.4 unterstützt. Siehe support table on caniuse.com.
@erdomester Es funktioniert auf unterstützten Browsern. Sie können in W3C-Link testen, die ich zur Verfügung gestellt habe. – indusBull
Ich habe es ausprobiert und es funktioniert auch wenn ich maxlength = "500px". Aber der Link, den du angegeben hast, war inaktiv, als ich diesen Kommentar gepostet habe und die Seite, die angezeigt wurde, war (denke ich) andere Attribute als die, die jetzt angezeigt wird. – erdomester
Diese Verbindung ist nicht mit dem W3C, es ist W3Schools, die für das Ausgeben von falschen Informationen bekannt ist. – Toby
$(function(){
$("#id").keypress(function() {
var maxlen = 100;
if ($(this).val().length > maxlen) {
return false;
}
})
});
Referenz Set maxlength in Html Textarea
Beachten Sie, dass die oben geschrieben onKeyPress Funktion einen beliebigen Text aus wird eingegeben in das Textfeld verhindern, sobald die Zeichenbegrenzung getroffen wird - keine Zeichen gelöscht werden. Ein robusteres Snippet würde es dem Benutzer ermöglichen, das maximale Limit zu erreichen und dann die Backspace-Taste drücken, um Zeichen zu löschen, um den Text unter das Limit zu bringen. – shek
Vielleicht sind es nur ich und meine schlechte Arithmetik, aber ich habe den Eindruck, dass IE und FF sich bei der Verwendung neuer Zeilen in Textareas anders verhalten als Chrome in Bezug auf 'maxlength'. Hat mit dem '\ r \ n' vs.' \ n' Problem zu tun (wenn Ihr Text Zeilenumbrüche enthält) ... Definitiv scheint 'maxlength' unter Windows nicht browserübergreifend zu funktionieren. .. Aber nichts Neues hier, nur der gleiche alte Buggy HTML/JS Zeug ... – user2173353