Signatur
Beschreibung
Die schreibgeschützte Eigenschaft originalTarget liefert den Knoten, an dem ein Ereignis tatsächlich ausgelöst wurde, bevor die Neuzuordnung des Ziels (Retargeting) greift. Der Browser ordnet das Ziel zum Beispiel dann neu zu, wenn das Ereignis in einem Shadow DOM oder in internen (anonymen) Elementen eines Bedienelements entsteht, etwa im inneren Textfeld eines <input type="number">, in einer Bildlaufleiste oder in den Steuerelementen von <video>. In solchen Fällen zeigt event.target auf den äußeren Host, event.originalTarget dagegen auf den inneren Knoten.
Ohne Retargeting sind originalTarget und target identisch. Nützlich ist die Eigenschaft vor allem beim Debuggen in Firefox, in Browser-Erweiterungen und in privilegiertem Code (Chrome-Code von Firefox). Dort muss man manchmal genau wissen, welcher interne Teil eines Elements das Ereignis empfangen hat.
Die Eigenschaft ist nicht Teil eines Webstandards und gehört zu den Gecko-spezifischen Erweiterungen. Für Webanwendungen gibt es mit event.composedPath()[0] einen standardisierten Ersatz: Er liefert bei offenen Shadow Roots den innersten Knoten. Interne, anonyme Inhalte von Browser-Bedienelementen und geschlossene Shadow Roots werden damit allerdings nicht offengelegt.
Rückgabewert
undefined.Beispiele
target und originalTarget vergleichen (Firefox)
// HTML: <input type="number" id="menge">
const feld = document.getElementById('menge');
feld.addEventListener('click', (event) => {
console.log('target:', event.target.nodeName);
// In Firefox kann hier ein internes, anonymes Element erscheinen
console.log('originalTarget:', event.originalTarget?.nodeName);
console.log('gleich?', event.target === event.originalTarget);
});
Browserübergreifend mit Fallback auf composedPath()
const getOriginalTarget = (event) =>
event.originalTarget ?? event.composedPath?.()[0] ?? event.target;
document.addEventListener('click', (event) => {
const ursprung = getOriginalTarget(event);
console.log('Ursprung:', ursprung.nodeName, '| target:', event.target.nodeName);
});
Shadow DOM: Retargeting sichtbar machen
const host = document.createElement('div');
document.body.append(host);
const root = host.attachShadow({ mode: 'open' });
root.innerHTML = '<button>Innen</button>';
document.addEventListener('click', (event) => {
console.log('target:', event.target.nodeName); // Host
console.log('composedPath[0]:', event.composedPath()[0].nodeName); // Button
if ('originalTarget' in event) {
console.log('originalTarget:', event.originalTarget.nodeName);
}
});
root.querySelector('button').click();
// Wichtig · Fallstricke
- Nicht standardisiert: Die Eigenschaft gibt es nur in Firefox. Chrome, Edge und Safari kennen sie nicht, dort ist sie
undefined. In Produktivcode sollte man sie nicht voraussetzen, sondern per Feature-Erkennung ('originalTarget' in event) oder mit??absichern. - Standard-Alternative:
event.composedPath()[0]liefert bei offenen Shadow Roots den innersten Knoten. Bei geschlossenen Shadow Roots (mode: 'closed') und bei internen Inhalten von Bedienelementen gibt die Methode diese Knoten absichtlich nicht preis. - In Webinhalten kann
originalTargetauf anonyme, interne Knoten zeigen, auf die man kaum zugreifen kann (etwa bei Bildlaufleisten). Vorsicht beim Auslesen von Eigenschaften wieidoderclassList: Diese Knoten verhalten sich möglicherweise nicht wie normale Elemente. - Nicht verwechseln mit
explicitOriginalTarget, das ebenfalls nur Firefox kennt: Diese Eigenschaft berücksichtigt auch Neuzuordnungen, die nicht auf anonymen Inhalten beruhen (etwa bei synthetischen Ereignissen). - Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird stillschweigend ignoriert (im strikten Modus wird ein
TypeErrorausgelöst).