Start · Sprachen · JavaScript · Referenz · new InputEvent()

new InputEvent()

Methode

Der Konstruktor <code>InputEvent()</code> erstellt ein neues <code>InputEvent</code>-Objekt, das eine Änderung an bearbeitbarem Inhalt beschreibt, etwa bei <code>input</code> oder <code>beforeinput</code>.

seit JavaScript Baseline: alle modernen Browser (seit 2017) Kategorie: webapi

Signatur

new InputEvent(type, options)

Beschreibung

Mit new InputEvent() erzeugst du synthetische Eingabe-Events, wie sie der Browser sonst bei Änderungen an <input>, <textarea> oder Elementen mit contenteditable auslöst. Typische Event-Typen sind "input" und "beforeinput".

Zum Einsatz kommt der Konstruktor vor allem in Tests, beim programmatischen Befüllen von Formularen, wenn Frameworks (React, Vue, Angular) die Änderung mitbekommen sollen, und in eigenen Editor-Komponenten, die Eingaben weiterreichen. Das Objekt wird danach mit element.dispatchEvent() ausgelöst.

Wichtig: Ein synthetisches Event ändert den Inhalt nicht selbst. Es informiert nur die Listener. Wenn der Wert tatsächlich geändert werden soll, musst du ihn vorher selbst setzen (z. B. über element.value). Außerdem ist bei so erzeugten Events isTrusted immer false.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Events, z. B. "input" oder "beforeinput". Groß-/Kleinschreibung wird beachtet.
$options InputEventInit {} Optionales Objekt. Neben den Feldern aus UIEventInit/EventInit (bubbles, cancelable, composed, view, detail) gibt es:
  • inputType (string, Standard ""): Art der Änderung, z. B. "insertText", "deleteContentBackward", "insertFromPaste".
  • data (string | null, Standard null): eingefügte Zeichen.
  • isComposing (boolean, Standard false): ob das Event während einer IME-Komposition auftritt.
  • dataTransfer (DataTransfer | null, Standard null): Daten bei Rich-Text-Einfügen oder Drag & Drop.
  • targetRanges (StaticRange[], Standard []): betroffene Bereiche, abrufbar über getTargetRanges().

Rückgabewert

Typ
InputEvent
Beschreibung
Ein neues InputEvent-Objekt, das mit dispatchEvent() ausgelöst werden kann.

Beispiele

Einfaches input-Event erzeugen und auslesen

const event = new InputEvent('input', {
  inputType: 'insertText',
  data: 'a',
  bubbles: true
});

console.log(event.type, event.inputType, event.data, event.isTrusted);
input insertText a false

Formularfeld programmatisch befüllen und Listener informieren

const field = document.querySelector('#email');

field.addEventListener('input', (e) => {
  console.log(`Neuer Wert: ${e.target.value} (${e.inputType})`);
});

// Erst den Wert setzen, dann das Event auslösen
field.value = 'max@example.com';
field.dispatchEvent(new InputEvent('input', {
  bubbles: true,
  inputType: 'insertReplacementText',
  data: 'max@example.com'
}));
Neuer Wert: max@example.com (insertReplacementText)

Abbrechbares beforeinput in einer Editor-Komponente

const editor = document.querySelector('[contenteditable]');

editor.addEventListener('beforeinput', (e) => {
  // Keine Ziffern zulassen
  if (e.inputType === 'insertText' && /\d/.test(e.data ?? '')) {
    e.preventDefault();
  }
});

const ev = new InputEvent('beforeinput', {
  inputType: 'insertText',
  data: '5',
  bubbles: true,
  cancelable: true
});

const notCanceled = editor.dispatchEvent(ev);
console.log('Durchgelassen:', notCanceled);
Durchgelassen: false

// Wichtig · Fallstricke

  • Kein echter Inhalt: Ein synthetisches InputEvent fügt keinen Text ein und löscht auch keinen. Den Inhalt musst du selbst ändern.
  • Standardwerte: bubbles und cancelable sind standardmäßig false. Delegierte Listener (z. B. in Frameworks) sehen das Event nur, wenn du bubbles: true setzt.
  • React & Co.: React verfolgt Werte intern. Ein direktes el.value = … wird eventuell ignoriert. Setze den Wert dann über den nativen Setter (Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value').set.call(el, v)) und löse danach das Event aus.
  • isTrusted: ist immer false. Browser-Funktionen, die eine echte Nutzeraktion voraussetzen, lassen sich damit nicht auslösen.
  • Kompatibilität: Der Konstruktor wird in allen modernen Browsern unterstützt. dataTransfer, targetRanges und getTargetRanges() sind ältere bzw. weniger einheitlich umgesetzte Teile der Spezifikation. Der Internet Explorer kennt den Konstruktor nicht; dort braucht es als Ausweg new Event('input').