Verhindern, dass Benutzer vom schreiben mehr als N Zeichen in einer textarea mit Prototyp-Ereignis-Beobachter
Ich bin mir bewusst, dass es möglich ist, zu emulieren, die maxlength
Eigenschaft von input
Elemente auf einer textarea
durch die Nutzung dieser trick:
<textarea rows="5" cols="30" onkeydown="return checkLength(this)"></textarea>
<script type="text/javascript">
var maxLength = 30;
function checkLength(elem) {
if (elem.value.length == maxLength) {
return false;
}
return true;
}
</script>
Mithilfe checkLenght Rückgabewert, als Rückgabewert für die onkeydown
Veranstaltung, ich bin in der Lage, effektiv verhindern, dass die Benutzer vom schreiben über das konfigurierte limit, da der event-Kette gebrochen werden, bevor die eingegebenen Zeichen angezeigt wird.
Ich habe versucht, die gleiche Technik mit Prototypen Ereignis-Beobachter, aber es hat nicht funktioniert. Hier ist eine vereinfachte version von dem, was ich versuchte:
<textarea rows="5" cols="30" id="myTextArea"></textarea>
<script type="text/javascript">
var maxLength = 30;
function checkLength() {
if ($('myTextArea').value.length == maxLength)) {
return false;
}
return true;
}
document.observe('dom:loaded',function(){
$('myTextArea').observe('keydown',checkLength);
});
</script>
Offenbar, das wird nicht funktionieren, denn ich kann nicht brechen die Ereignis-Kette durch Rückgabe von false (und Event.stop()
nur verhindern, dass dieses Ereignis von bubbling-up, nicht zu stoppen, die Ausführung insgesamt).
Habe ich workarounded dieses problem durch die überprüfung der textarea-Länge auf die onkeyup
Ereignis und trimmen seinen Wert, wenn der Grenzwert überschritten wird; aber es ist nicht das gleiche, wie der Benutzer siehe text erscheinen und verschwinden.
Ist es ein Weg, um das gleiche Ergebnis zu erzielen?
Gut, es ist ein standard in desktop-Anwendungen, um nicht lassen Sie Sie schreiben über die Eingabe beschränken. Der Unterschied ist, dass im desktop-Anwendungen, die Sie in der Regel hören einen "piep", wenn Sie versuchen, das zu tun. Wie auch immer, ich denke, die meisten Benutzer werden es vorziehen, dass eine sofortige Rückmeldung, wenn Sie versuchen zu schreiben, über die Grenze, um neu zu schreiben (oder löschen) ein Haufen text schon geschrieben.
InformationsquelleAutor Pablo Borowicz | 2009-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Prüfen, die anderen Antworten und Kommentare. Besser eine post-Validierung und einfach nicht akzeptieren, die post.
Dennoch Folgendes sollte funktionieren (tut es in FF und IE, im Opera nicht. Kann nicht sein belästigt, um zu überprüfen, warum)
event
als argument zuEvent.stop()
.Ich habe immer schaudert ein wenig, wenn ich sehe
stop()
oder ähnlich wichtigen Veranstaltungen. Die Tatsache berücksichtigen, dass, je nach browser, du bist auch blocking-system/application-Tastatur-Befehle. Es ist eine einfache Prüfung, um zu sehen, dass zum Beispielctrl
undalt
sind nicht gedrückt ist (und das system ist nicht Mac) odercmd
undctrl
sind nicht gedrückt ist (und das system ist Mac). Ein weiteres Anliegen ist, dass Sie verhindern, dass die Benutzer, die durch das ersetzen aller Inhalte, durch die Blockierung derdelete
undbackspace
Schlüssel, sowie alle, die in der Eingabe ersetzt markierten text.Nun, das ist genau, warum sollten Sie nicht tun, diese überhaupt
InformationsquelleAutor jitter
Trimmen ist keine gute Lösung, nur versuchen, diese zu wissen, warum
Füllen Sie das Textfeld, dann gehen Sie zu dem mittleren Teil und geben Zeichen
Macht eine schreckliche Wirkung: Die eingegebenen Zeichen werden getroffen und dann ist es trimed, so Ende text ist verloren.
maxlength=21
Wert(mit Länge=21): "Dies Ist, Was Eingegeben Wird"
dann geben Sie vor, "Was": "Nicht"
Sie erhalten: "Das Ist Nicht das, Was Ist T"
Gewünschte Effekt ist neu eingegebene Zeichen werden ignoriert, anstatt zu verwerfen, der text end.
In dem Beispiel ist es sehr kurz... vorstellen mehrzeiligen textarea - ... Benutzer mit der Eingabe fortfahren in der Mitte, ohne zu sehen, am Ende wird verworfen.
Versuchen das gleiche Beispiel auf einer input type="text" mit maxlength, Sie sehen werden, wenn limit erreicht ist neue eingegebene Zeichen werden ignoriert, egal wo der cursor auf dem text, am Anfang, Mitte oder Ende.
InformationsquelleAutor z666zz666z
Den Dokumentation besagt, dass
Event#stop
Stoppt die Vermehrung sowie verhindert, dass Standard-Aktion. Es tut nicht arbeiten?Auch, die Bindung an keydown/keyup nicht verhindern, dass Sie zusammenkleben große Menge von text in den Textbereich.
Wie Joel sagte in seinem Kommentar, zu verhindern, dass Benutzer von der Eingabe vielleicht keine gute Idee. Es ist viel besser, eine Validierung + Warnung (wie in dem Kommentar Bereich von Stackoverflow).
event
als argument zuEvent.stop()
. In Bezug auf Ihren Kommentar über das einfügen einer großen Menge an text, ich nahm die Rechnung und kürzen Sie den text auf derkeyup
Veranstaltung. Aber jetzt, dass ich an Sie denke, vielleicht sollte ich auch tun, auf dieonclick
Veranstaltung.Man kann nie alle Fälle handhaben. Benutzer können text hinzufügen, indem Sie mit der rechten Maustaste-einfügen oder auch durch auswählen und ziehen von text aus anderen Anwendungen. Und Gott weiß, welche anderen Wege, die Sie angepasst haben, Ihren Computer zu ermöglichen, geben Sie die Daten (virtuelle Tastatur zum Beispiel).
InformationsquelleAutor Chetan Sastry
Mit setInterval prüfen Sie regelmäßig den Zustand deiner textarea " trim-text, wenn Sie wollen.
InformationsquelleAutor Anatoliy