Wie erkenne ich Änderungsereignisse im Textbereich mithilfe von Javascript?
Ich versuche festzustellen, wie viele Zeichen während der Eingabe noch verfügbar sind.
Ich habe versucht, das Ereignis onchange zu verwenden, aber das scheint nur dann zu funktionieren, wenn der Fokus nicht mehr vorhanden ist.
javascript
teepusink
quelle
quelle
onkeyup
ist ein schreckliches Ereignis für die Eingabeerkennung. Verwenden Sieoninput
undonpropertychange
(für IE-Unterstützung).onchange
wird nicht ausgelöst , wenn ein Kontextmenü Ausschneiden / Einfügen auftritt.Es ist 2012, die Post-PC-Ära ist da und wir haben immer noch mit so etwas Grundlegendem zu kämpfen. Das sollte sehr einfach sein .
Bis sich dieser Traum erfüllt hat, ist dies der beste Weg, dies über einen Browser zu tun: Verwenden Sie eine Kombination aus
input
undonpropertychange
Ereignissen wie folgt:Das
input
Ereignis kümmert sich um IE9 +, FF, Chrome, Opera und Safari undonpropertychange
kümmert sich um IE8 (es funktioniert auch mit IE6 und 7, aber es gibt einige Fehler).Der Vorteil von
input
undonpropertychange
besteht darin, dass sie nicht unnötig ausgelöst werden (wie beim Drücken der TastenCtrl
oderShift
). so , wenn Sie ändern , um eine relativ teure Operation , wenn die Textarea Inhalte ausführen möchten, ist dies der Weg zu gehen .Jetzt unterstützt IE dies wie immer nur halb: Es wird im IE weder ausgelöst
input
noch ausgelöst,onpropertychange
wenn Zeichen aus dem Textbereich gelöscht werden . Wenn Sie also das Löschen von Zeichen im IE behandeln müssen, verwenden Siekeypress
(im Gegensatz zur Verwendung vonkeyup
/keydown
, da diese nur einmal ausgelöst werden, selbst wenn der Benutzer eine Taste drückt und gedrückt hält).Quelle: http://www.alistapart.com/articles/expanding-text-areas-made-elegant/
BEARBEITEN: Es scheint, dass selbst die obige Lösung nicht perfekt ist, wie in den Kommentaren zu Recht ausgeführt: Das Vorhandensein der
addEventListener
Eigenschaft im Textbereich bedeutet nicht, dass Sie mit einem vernünftigen Browser arbeiten. in ähnlicher Weise das Vorhandensein derattachEvent
Unterkunft gibt es nicht bedeuten , IE. Wenn Sie möchten, dass Ihr Code wirklich luftdicht ist, sollten Sie dies ändern. Hinweise finden Sie in Tim Downs Kommentar .quelle
addEventListener
bedeutet keine Unterstützung für dasinput
Ereignis oder umgekehrt); Feature-Erkennung wäre besser. In diesem Blogbeitrag finden Sie eine Diskussion dazu.oninput
So sollten wir das machen, aber Sie sollten es wahrscheinlich nichtaddEventListener
als Test für die Browserunterstützung verwenden. +1 auf jeden Fall.keypress
Ereignis auch zu verwenden, um diesen Fall in IE9 (und möglicherweise auch in späteren Versionen) zu behandeln.input
Der Ereignishandler kann auch durch Implementieren der.oninput
Objekteigenschaft definiert werden .Nicht auf Firefox getestet.
quelle
Ich weiß, dass dies nicht genau Ihre Frage ist, aber ich dachte, dass dies nützlich sein könnte. Für bestimmte Anwendungen ist es schön, dass die Änderungsfunktion nicht jedes Mal ausgelöst wird, wenn eine Taste gedrückt wird. Dies kann mit so etwas erreicht werden:
Dies funktioniert durch Testen, ob ein neueres Ereignis innerhalb einer bestimmten Verzögerungszeit ausgelöst wurde. Viel Glück!
quelle
Ich weiß, dass diese Frage spezifisch für JavaScript war. Es scheint jedoch keine gute und saubere Möglichkeit zu geben, IMMER zu erkennen, wenn sich ein Textbereich in allen aktuellen Browsern ändert. Ich habe erfahren, dass jquery sich für uns darum gekümmert hat. Es werden sogar kontextbezogene Menüänderungen an Textbereichen verarbeitet. Die gleiche Syntax wird unabhängig vom Eingabetyp verwendet.
oder
quelle
bind("input cut paste"...
und es funktioniert wie ein Zauber - Tippen, Ausschneiden und Einfügen über die Tastatur oder das Kontextmenü; sogar Drag & Drop von Text.change
Ereignis fürtextarea
.Sie können das Ereignis beim Ändern des Textbereichs anhören und die Änderungen nach Ihren Wünschen vornehmen. Hier ist ein Beispiel.
quelle
Keyup sollte ausreichen, wenn es mit dem HTML5-Eingabevalidierungs- / Musterattribut gepaart ist. Erstellen Sie also ein Muster (Regex), um die Eingabe zu validieren und auf den Status .checkValidity () zu reagieren. So etwas wie unten könnte funktionieren. In Ihrem Fall möchten Sie, dass ein regulärer Ausdruck der Länge entspricht. Meine Lösung wird hier online verwendet / demonstriert .
quelle
Code, den ich für IE 11 ohne Abfrage und nur für einen einzelnen Textbereich verwendet habe:
Javascript:
und html:
quelle
Probier diese. Es ist einfach und seit 2016 ist es sicher für die meisten Browser geeignet.
quelle
Das Beste, was Sie tun können, ist, eine Funktion festzulegen, die für einen bestimmten Zeitraum aufgerufen werden soll, und diese Funktion, um den Inhalt Ihres Textbereichs zu überprüfen.
quelle