Signatur
Beschreibung
TextEvent.data ist eine schreibgeschützte Zeichenkette am TextEvent-Objekt. Sie enthält die Zeichen, die durch eine Texteingabe gerade in ein editierbares Element eingefügt werden, zum Beispiel in ein <input>, eine <textarea> oder ein Element mit contenteditable. Meist ist das ein einzelnes Zeichen. Beim Einfügen aus der Zwischenablage, bei der Autokorrektur oder beim Abschluss einer IME-Komposition (etwa bei chinesischer oder japanischer Eingabe) können es aber auch mehrere Zeichen sein.
Ein TextEvent entsteht beim nicht standardisierten Ereignis textInput. Es wird vor der Änderung am Dokument ausgelöst und lässt sich mit preventDefault() abbrechen. So kann man die Eingabe prüfen oder unerwünschte Zeichen blockieren.
Das Interface ist veraltet und existiert nur noch für die Kompatibilität mit älterem Code. In neuem Code sollte man das Ereignis beforeinput mit InputEvent.data und InputEvent.inputType verwenden. Es bietet dieselben Möglichkeiten, ist standardisiert und unterscheidet genauer zwischen den Eingabearten, also Tippen, Einfügen, Löschen und so weiter.
Rückgabewert
initTextEvent() ohne Daten erzeugt, ist es eine leere Zeichenkette.Beispiele
Eingegebene Zeichen protokollieren
const feld = document.querySelector('#name');
feld.addEventListener('textInput', (event) => {
// event ist ein TextEvent, event.data enthält den einzufügenden Text
console.log(`Eingabe: "${event.data}"`);
});
Nur Ziffern zulassen (Legacy-Variante)
const plz = document.querySelector('#plz');
const nurZiffern = (event) => {
if (!/^\d+$/.test(event.data)) {
event.preventDefault(); // Eingabe verwerfen
console.warn(`Ungültige Eingabe verworfen: ${event.data}`);
}
};
plz.addEventListener('textInput', nurZiffern);
// Später wieder entfernen
// plz.removeEventListener('textInput', nurZiffern);
Moderne Alternative mit beforeinput und InputEvent.data
const plz = document.querySelector('#plz');
plz.addEventListener('beforeinput', (event) => {
// Nur Einfügungen prüfen, Löschen bleibt erlaubt
if (event.inputType.startsWith('insert') && event.data && !/^\d+$/.test(event.data)) {
event.preventDefault();
}
});
Unterstützung per Feature-Erkennung prüfen
const hatTextEvent = typeof window.TextEvent === 'function' && 'data' in TextEvent.prototype;
const hatBeforeInput = 'onbeforeinput' in document.documentElement;
console.log({ hatTextEvent, hatBeforeInput });
// Wichtig · Fallstricke
- Veraltet:
TextEventund das EreignistextInputgehören zu keinem aktuellen Standard. Verwende in neuem CodebeforeinputmitInputEvent.data. - Kompatibilität: Chromium-Browser und Safari unterstützen das Interface schon lange, Firefox erst ab Version 126. Ältere Firefox-Versionen lösen
textInputnicht aus. Deshalb solltest du dich nie allein darauf verlassen. - Es gibt keine Eigenschaft
ontextinput. Du musst den Handler mitaddEventListener('textInput', …)registrieren. Achte auf das große „I“ im Ereignisnamen. - Löschen (Rücktaste, Entf) und Zeilenumbrüche lösen in der Regel kein
textInputaus. Eine Validierung allein überdataist deshalb lückenhaft. Prüfe den endgültigen Wert zusätzlich beim Absenden. - Bei IME-Kompositionen wird das Ereignis erst mit dem fertigen Text ausgelöst. Einzelne Tastendrücke erscheinen nicht in
data. - Eine clientseitige Filterung ersetzt keine Prüfung auf dem Server, denn sie lässt sich leicht umgehen.