2016-05-11 7 views
4

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?

+0

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). –

+0

Haben Sie versucht, event.stoppropagation() oder event.PreventDefault() – AhammadaliPK

+0

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. –

Antwort

0

entfernen Sie den Handler vor dem appendChild und wieder danach.

+0

Downvote scheint hart, es sei denn, der Downvoter weiß, dass es nicht funktioniert (in diesem Fall wäre das ein nützlicher Kommentar). Ja, die Antwort fehlt im Detail, aber an und für sich macht es das nicht "nicht nützlich". –

+0

Dies verhindert, dass das mouseleave-Ereignis ausgelöst wird, aber ein zusätzliches mousenter-Ereignis wird noch ausgelöst. Ich kann das extra mouseenter -Ereignis umgehen. –

+0

Entfernen Sie beide Handler und legen Sie sie beide zurück, wenn Sie dann mögen. –

Verwandte Themen