Ich hätte gerne eine Funktionalität, mit der ich schreiben kann
<textarea maxlength="50"></textarea>
<textarea maxlength="150"></textarea>
<textarea maxlength="250"></textarea>
Die maximale Länge wird der textArea automatisch auferlegt. Wenn möglich, geben Sie die Lösung bitte nicht in jQuery an.
Hinweis: Dies kann gemacht werden, wenn ich so etwas mache:
<textarea onkeypress="return imposeMaxLength(event, this, 110);" rows="4" cols="50">
function imposeMaxLength(Event, Object, MaxLen)
{
return (Object.value.length <= MaxLen)||(Event.keyCode == 8 ||Event.keyCode==46||(Event.keyCode>=35&&Event.keyCode<=40))
}
Kopiert von Was ist der beste Weg, um ein HTML-Eingabeattribut "maxlength" in einem HTML-Textbereich zu emulieren?
Aber der Punkt ist, dass ich nicht jedes Mal, wenn ich eine textArea deklariere, aufKeyPress und onKeyUp schreiben möchte.
javascript
html
textarea
Rakesh Juyal
quelle
quelle
Antworten:
quelle
onblur
behandelt das Einfügen erst, wenn der Benutzer aus dem Textbereich klickt.onkeyup
wird das Einfügen nicht verarbeiten, wenn es über ein Kontextmenü oder ein Browsermenü erfolgt. Dieser Ansatz funktioniert, wenn Sie nicht nach Einfügen suchen müssen. Siehe diese Antwort für einen zeitgeberbasiertenIch weiß, dass Sie jQuery vermeiden möchten, aber da die Lösung JavaScript erfordert, ist diese Lösung (mit jQuery 1.4) die konsequenteste und robusteste.
Inspiriert von, aber eine Verbesserung gegenüber Dana Woodmans Antwort:
Änderungen gegenüber dieser Antwort sind: Vereinfacht und allgemeiner, mit jQuery.live und ohne Festlegen von val, wenn die Länge in Ordnung ist (führt zu funktionierenden Pfeiltasten im IE und zu einer spürbaren Beschleunigung im IE):
BEARBEITEN: Aktualisierte Version für jQuery 1.7+ mit
on
anstelle vonlive
quelle
Update Verwenden Sie
.live()
stattdessen die Lösung von Eirik, da diese etwas robuster ist.Obwohl Sie eine Lösung wollten, die jQuery nicht verwendet, dachte ich, ich würde eine hinzufügen, wenn jemand diese Seite über Google findet und nach einer jQuery-ähnlichen Lösung sucht:
Hoffe das ist nützlich für euch Googler da draußen ...
quelle
HTML5 fügt
maxlength
demtextarea
Element ein Attribut hinzu , wie folgt:Dies wird derzeit in Chrome 13, FF 5 und Safari 5 unterstützt. Es überrascht nicht, dass dies in IE 9 nicht unterstützt wird. (Getestet unter Win 7)
quelle
Diese Lösung vermeidet das Problem im IE, bei dem das letzte Zeichen entfernt wird, wenn ein Zeichen in der Mitte des Textes hinzugefügt wird. Es funktioniert auch gut mit anderen Browsern.
Meine Formularüberprüfung befasst sich dann mit allen Problemen, bei denen der Benutzer möglicherweise Text eingefügt hat (der im IE nur ein Problem zu sein scheint), der die maximale Länge des Textbereichs überschreitet.
quelle
Dies ist ein optimierter Code, den ich gerade auf meiner Website verwendet habe. Es wurde verbessert, dem Benutzer die Anzahl der verbleibenden Zeichen anzuzeigen.
(Entschuldigen Sie noch einmal OP, der keine jQuery angefordert hat. Aber im Ernst, wer verwendet jQuery heutzutage nicht?)
Wurde NICHT mit internationalen Multi-Byte-Zeichen getestet, daher bin ich mir nicht sicher, wie es genau mit diesen funktioniert.
quelle
Fügen Sie außerdem das folgende Ereignis hinzu, um das Einfügen in den Textbereich zu behandeln:
quelle
aus HTML maxlength Attribut w3schools.com
Für IE8 oder frühere Versionen müssen Sie Folgendes verwenden
PS
aus HTML maxlength Attribut w3schools.com
quelle
Bessere Lösung im Vergleich zum Trimmen des Werts des Textbereichs.
quelle
Sie können jQuery verwenden, um es einfach und klar zu machen
JSFiddle DEMO
Es wird geprüft , in
Firefox
,Google Chrome
undOpera
quelle
text
wird, mit dem "Wert" des Texareas gefüllt wird, bevor er aktualisiert wurde. Dies bedeutet, dass Ihr Test sein sollteif( text.length +1 > maxlength) {return false;}
. Andernfalls könnte man nurmaxlength - 1
Zeichen:/
if(text.length+1 > maxlength)
oderif(text.length >= maxlength)
...Ein kleines Problem mit dem obigen Code ist, dass val () kein change () -Ereignis auslöst. Wenn Sie also backbone.js (oder ein anderes Framework für die Modellbindung) verwenden, wird das Modell nicht aktualisiert.
Ich poste, dass die Lösung für mich großartig funktioniert hat.
quelle
Ich habe kürzlich ein
maxlength
Verhalten implementierttextarea
und bin auf das in dieser Frage beschriebene Problem gestoßen : Chrome zählt Zeichen, die im Textbereich mit dem Attribut maxlength falsch sind .Alle hier aufgeführten Implementierungen funktionieren also nur geringfügig fehlerhaft. Um dieses Problem zu lösen, füge ich
.replace(/(\r\n|\n|\r)/g, "11")
vorher hinzu.length
. Und beim Schneiden der Schnur im Hinterkopf behalten.Ich endete mit so etwas:
Ich bin mir nicht sicher, ob es das Problem vollständig löst, aber es funktioniert vorerst für mich.
quelle
Probieren Sie diese jQuery aus, die in IE9, FF, Chrome funktioniert und Benutzern einen Countdown bietet:
quelle
Versuchen Sie, dieses Codebeispiel zu verwenden:
quelle
Das ist viel einfacher:
quelle
maxlength
da Sie Zeichenfolgen einfügen können, die länger als die gewünschte Länge sind.