Start · Sprachen · JavaScript · Referenz · TextEvent.initTextEvent()

TextEvent.initTextEvent()

Methode

Initialisiert ein mit <code>document.createEvent("TextEvent")</code> erzeugtes <code>TextEvent</code> mit Typ, Bubbling-Verhalten, View und eingegebenem Text.

seit JavaScript Veraltet (deprecated); Chrome/Edge/Safari seit Lan deprecated seit ja Kategorie: webapi

Signatur

TextEvent.prototype.initTextEvent(type, bubbles, cancelable, view, data)

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

Typ
undefined
Beschreibung
Kein Rückgabewert. Das Ereignisobjekt wird direkt verändert.

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);
textInput empfangen: "Hallo", vertrauenswürdig: false

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);
Blockiert: "abc" Standardaktion erlaubt: false

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'));
true

// Wichtig · Fallstricke

  • Veraltet: TextEvent und initTextEvent() werden nur noch aus Kompatibilitätsgründen unterstützt. Verwende stattdessen InputEvent mit beforeinput und input.
  • 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 inputMethod und locale, 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, weise value direkt zu oder nutze setRangeText().
  • Der Aufruf muss vor dispatchEvent() erfolgen. Während das Ereignis verarbeitet wird, hat er keine Wirkung.
  • Der Name des Ereignistyps unterscheidet Groß- und Kleinschreibung: textInput mit großem „I“.