Signatur
Beschreibung
Mit new MouseEvent() erzeugst du programmgesteuert Mausereignisse wie click, mousedown, mouseup, mousemove, mouseover oder contextmenu. Das erzeugte Objekt wird erst wirksam, wenn es mit EventTarget.dispatchEvent() auf einem Element ausgelöst wird.
Typische Einsatzgebiete sind automatisierte Tests (Unit- und Integrationstests ohne echten Benutzer), das Weiterleiten von Interaktionen an andere Elemente sowie das Simulieren von Mausbewegungen, etwa für Drag-Logik oder Tooltips. Über das Options-Objekt legst du Koordinaten, gedrückte Tasten, Modifikatortasten (Strg, Umschalt, Alt, Meta) und das Bubbling-Verhalten fest.
Wichtig: Synthetische Events haben isTrusted === false. Browser behandeln sie daher nicht wie echte Benutzeraktionen. Aktionen, die eine Benutzeraktivierung erfordern (Pop-ups öffnen, Vollbild, Zwischenablage, Audio-Autoplay), werden dadurch nicht freigeschaltet. Außerdem ist standardmäßig bubbles: false – Event-Delegation greift nur, wenn du bubbles: true explizit setzt.
Der Konstruktor ersetzt die veraltete Kombination aus document.createEvent('MouseEvents') und initMouseEvent().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Name des Ereignisses, z. B. "click", "mousedown", "mousemove", "dblclick", "contextmenu". Groß-/Kleinschreibung wird beachtet. |
|
| $options | MouseEventInit | {} | Optionales Objekt. Erbt von EventInit/UIEventInit/EventModifierInit. Wichtige Felder:
|
Rückgabewert
MouseEvent-Objekt mit den übergebenen Eigenschaften und isTrusted === false. Es wird noch nicht ausgelöst – dafür dispatchEvent() verwenden.Beispiele
Klick auf einen Button simulieren
const button = document.createElement('button');
button.textContent = 'Speichern';
document.body.append(button);
button.addEventListener('click', (event) => {
console.log('Geklickt!', event.isTrusted, event.clientX, event.clientY);
});
const klick = new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window,
clientX: 120,
clientY: 45
});
const nichtAbgebrochen = button.dispatchEvent(klick);
console.log('Standardaktion ausgeführt:', nichtAbgebrochen);
Rechtsklick mit Strg-Taste für Kontextmenü-Tests
const liste = document.createElement('ul');
liste.innerHTML = '<li>Datei A</li><li>Datei B</li>';
document.body.append(liste);
// Event-Delegation am Elternelement – funktioniert nur mit bubbles: true
liste.addEventListener('contextmenu', (event) => {
event.preventDefault();
const taste = event.button === 2 ? 'rechts' : 'andere';
console.log(`Kontextmenü für "${event.target.textContent}" (Taste: ${taste}, Strg: ${event.ctrlKey})`);
});
const zweitesItem = liste.children[1];
const ereignis = new MouseEvent('contextmenu', {
bubbles: true,
cancelable: true,
button: 2,
buttons: 2,
ctrlKey: true
});
const ergebnis = zweitesItem.dispatchEvent(ereignis);
console.log('defaultPrevented:', ereignis.defaultPrevented, '| Rückgabe:', ergebnis);
Drag-Bewegung für einen Test nachstellen
const box = document.createElement('div');
document.body.append(box);
let start = null;
box.addEventListener('mousedown', (e) => { start = { x: e.clientX, y: e.clientY }; });
document.addEventListener('mousemove', (e) => {
if (start && e.buttons & 1) {
console.log(`Verschoben um ${e.clientX - start.x}px / ${e.clientY - start.y}px`);
}
});
document.addEventListener('mouseup', () => { start = null; console.log('Losgelassen'); });
const sende = (ziel, typ, x, y, buttons) =>
ziel.dispatchEvent(new MouseEvent(typ, { bubbles: true, clientX: x, clientY: y, buttons }));
sende(box, 'mousedown', 10, 10, 1);
sende(box, 'mousemove', 50, 30, 1);
sende(box, 'mouseup', 50, 30, 0);
// Wichtig · Fallstricke
- Standardwert für
bubblesistfalse: Ohnebubbles: trueerreichen synthetische Events weder Eltern-Listener noch Event-Delegation – der häufigste Fehler. isTrustedist immerfalse: Synthetische Events lösen keine Benutzeraktivierung aus.window.open(),requestFullscreen(), Clipboard-Schreibzugriffe oder das Öffnen eines Datei-Dialogs können blockiert werden. Serverseitig oder in sicherheitsrelevanter Logik niemals darauf vertrauen, dass ein Klick echt ist.- Standardaktionen: Ein synthetisches
clickauf einem Link oder einer Checkbox löst in modernen Browsern die Aktivierung aus (Navigation bzw. Umschalten). Andere Events wiemousedownsetzen dagegen keinen Fokus und starten keine Textauswahl. Für einfache Klicks istHTMLElement.click()oft die kürzere Alternative. buttonundbuttonsunterscheiden sich:buttonnennt die auslösende Taste (0 links, 2 rechts),buttonsist eine Bitmaske (1 links, 2 rechts, 4 Mitte). Die Werte für rechts/Mitte sind vertauscht.pageX/pageY,offsetX/offsetYlassen sich nicht direkt setzen, sie werden ausclientX/clientYabgeleitet.- Für Zeigergeräte allgemein (Stift, Touch) ist
PointerEventvorzuziehen, da moderne Frameworks oft aufpointerdownstattmousedownhören. - Kompatibilität: in allen modernen Browsern verfügbar; der Internet Explorer unterstützt den Konstruktor nicht (dort nur das veraltete
initMouseEvent()).