Ich reagiere auf Mauser Ereignisse auf einem SVG-Pfadelement, indem ich den Pfad zum letzten Kind in seinem Elternelement mache. Dies ist so, dass es über anderen Elementen erscheint (leider kein Z-Index auf SVG-Material). Das Problem ist, dass dies bei Firefox dazu führt, dass ein mouseleave-Ereignis ausgelöst wird. Dies funktioniert in Chrome einwandfrei.Wie man Firefox davon abhielt, mouseleave auszulösen, wenn der DOM-Knoten im DOM verschoben wird?
// on mousenter
node.parentNode.appendChild(node)
// this triggers a mouseleave .. if i don't move the node it works
Kennt jemand einen Workaround oder einen anderen Ansatz?
Ugh, das klingt hässlich. Und ich kann mir nur eine hässliche Problemumgehung vorstellen: Setzen Sie ein Flag, um Ihrem mouseleave-Handler zu sagen, es zu ignorieren, und löschen Sie dieses Flag, wenn Sie das Ereignis erhalten und auch nach einem setTimeout (0), z. ... anhängen (...); setTimeout (function() {ignore = false;}, 0); 'Beachten Sie, dass 'setTimeout' * nach * der DOM-Manipulation ist, die möglicherweise einen Aufruf an Ihren Event-Handler in die Warteschlange gestellt hat (also Ihren Handler früher in der Warteschlange als' setTimeout "Callback). –
Haben Sie versucht, event.stoppropagation() oder event.PreventDefault() – AhammadaliPK
Ja, @ Roberts Lösung kann gut funktionieren. Wenn Firefox den Handler in der Handler-Liste nicht sieht, wird der Ereignis-Callback nicht in die Warteschlange gestellt. Die einzige Frage ist * wenn * es entscheidet, das Ereignis auszulösen, ob diese Entscheidung synchron mit 'appendChild' ist (kann es auch sein) oder später während des Renderings gemacht wird. –