Signatur
Beschreibung
Mit initTextEvent() legt man die Eigenschaften eines TextEvent-Objekts fest, das zuvor über document.createEvent("TextEvent") erzeugt wurde. Das ist nötig, weil TextEvent keinen eigenen Konstruktor besitzt. Das vorbereitete Ereignis wird danach mit dispatchEvent() ausgelöst.
Das zugehörige Ereignis heißt fast immer textInput. Es wird ausgelöst, bevor Text in ein editierbares Element (<input>, <textarea>, contenteditable) eingefügt wird. Der eingefügte Text steht in der Eigenschaft data.
Die Methode stammt aus dem alten DOM-Level-3-Events-Modell und gilt als veraltet. Sie wird nur noch aus Kompatibilitätsgründen unterstützt. Für neuen Code solltest du InputEvent mit den Ereignissen beforeinput und input verwenden, die einen richtigen Konstruktor haben: new InputEvent("beforeinput", { data, inputType }).
Du musst initTextEvent() vor dem Auslösen aufrufen. Ruft man die Methode auf, während das Ereignis gerade verarbeitet wird, passiert nichts.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Name des Ereignistyps, in der Praxis "textInput". |
|
| $bubbles | boolean | false | Gibt an, ob das Ereignis im DOM-Baum nach oben weitergereicht wird (Bubbling). |
| $cancelable | boolean | false | Gibt an, ob die Standardaktion mit preventDefault() verhindert werden kann. |
| $view | Window | null | null | Das zugehörige Window-Objekt, meist window. Wird zu event.view. |
| $data | string | "" | Der Text, den das Ereignis darstellt. Er steht danach in event.data. |
Rückgabewert
Beispiele
TextEvent erzeugen, initialisieren und auslösen
const feld = document.querySelector('#nachricht');
feld.addEventListener('textInput', (e) => {
console.log(`textInput empfangen: "${e.data}", vertrauenswürdig: ${e.isTrusted}`);
});
const ev = document.createEvent('TextEvent');
ev.initTextEvent('textInput', true, true, window, 'Hallo');
feld.dispatchEvent(ev);
Eingabe bestimmter Zeichen blockieren
const plz = document.querySelector('#plz');
// Nur Ziffern zulassen – echte Tastatureingaben lösen textInput aus
plz.addEventListener('textInput', (e) => {
if (!/^\d+$/.test(e.data)) {
e.preventDefault();
console.log(`Blockiert: "${e.data}"`);
}
});
// Test mit einem künstlichen Ereignis
const test = document.createEvent('TextEvent');
test.initTextEvent('textInput', true, true, window, 'abc');
const erlaubt = plz.dispatchEvent(test);
console.log('Standardaktion erlaubt:', erlaubt);
Funktionsprüfung mit modernem Ersatz über InputEvent
const sendeTexteingabe = (ziel, text) => {
if ('TextEvent' in window && 'initTextEvent' in TextEvent.prototype) {
const ev = document.createEvent('TextEvent');
ev.initTextEvent('textInput', true, true, window, text);
return ziel.dispatchEvent(ev);
}
// Empfohlene moderne Variante
const ev = new InputEvent('beforeinput', {
bubbles: true,
cancelable: true,
inputType: 'insertText',
data: text
});
return ziel.dispatchEvent(ev);
};
console.log(sendeTexteingabe(document.querySelector('#editor'), 'Test'));
// Wichtig · Fallstricke
- Veraltet:
TextEventundinitTextEvent()werden nur noch aus Kompatibilitätsgründen unterstützt. Verwende stattdessenInputEventmitbeforeinputundinput. - Browser-Unterstützung: Chromium-Browser und Safari unterstützen die Methode seit Langem, Firefox erst ab Version 117. Ältere WebKit-Versionen hatten zusätzliche Parameter wie
inputMethodundlocale, die nicht standardisiert sind. - Künstliche Ereignisse: Selbst ausgelöste Ereignisse haben
isTrusted === false. Ob der Browser den Text dann wirklich in das Feld einfügt, ist je nach Browser unterschiedlich. Verlass dich nicht darauf. Um Werte zu setzen, weisevaluedirekt zu oder nutzesetRangeText(). - Der Aufruf muss vor
dispatchEvent()erfolgen. Während das Ereignis verarbeitet wird, hat er keine Wirkung. - Der Name des Ereignistyps unterscheidet Groß- und Kleinschreibung:
textInputmit großem „I“.