2012-07-11 13 views
6

Haben Sie einen Blick auf diese jsFiddleMouseEnter-/mouseleave Ereignisse Brennen nicht für SVG-Elemente mit jQuery.on

Die mouseenter/mouseleave erscheinen nicht korrekt feuern, wenn jQuery in Verbindung mit SVG (Raphael 2.0) verwendet wird. Ich weiß out of the box SVG jQuery ist nicht 100% kompatibel mit SVG, aber soweit ich sehen kann, scheint es nur IE9 zu beeinflussen.

Die seltsame Sache ist, wenn Sie schnell bewegen Sie Ihre Maus an/aus dem SVG-Element (sicher, dass Sie direkt aus dem HTML-Bereich damit) und wieder auf die Ereignisse feuern (aber nicht jedes Mal). Nur um sicherzustellen, dass es kein allgemeines Problem mit on war, schloss ich das click Ereignis an, das immer gut funktioniert.

Frage mich nur, ob jemand weiß, ob dies ein Fehler oder sogar ein bekanntes Problem ist?

+0

funktioniert für mich (; chrome) –

+0

@StefanFandler - "* soweit ich sehen kann scheint es nur IE9 * zu beeinträchtigen". Markiert zur Klärung. – James

+0

Ich vermeide die Verwendung von jQuery in Verbindung mit SVG wie die Pest. Es ist ein Minenfeld voller solcher Ausnahmen. Ich denke, dass Ihr Fehler mit diesem http://forum.jquery.com/topic/1-6-2-broke-svg-hover-events (ungelöst von vor zwei Jahren) in Verbindung steht. – Duopixel

Antwort

2

Dies ist ein Fehler in 1.7.2. Siehe ticket.

Problem geht weg, wenn ich jQuery (Edge) verwende, so sollte in der nächsten geplanten Version (1.8) behoben werden.

0

Ich denke, es ist wichtig zu beachten, dass mit jQuery 1.8.2 und Android über Phonegap kein jq-Handy verwendet. Ich sehe Touch-und Mausereignisse zufällig ausgewählt und nicht synchronisiert ... Bedeutung subtile Unterschied Trigger-MausEnter und klicken Sie im Vergleich mit einer anderen Touch-Triggerung TouchStart (manchmal, wenn keine Eingabe gerade gesendet wurde eine MausEinter auftritt) dann 2 TouchEnds. Wenn Sie einen TouchEvent triggert haben, wird eine Mauseingabe das zweite Touchmuster (Start, Ende, Ende) sendet eine MausLeave (vorausgesetzt, Sie nicht zufällig über subtile Tap Differenzen auslösen eine Klick-Combo).

Meine Erwartung war, dass sie zusammen in beiden Situationen auslösen sollten, außer einer (Touch-Ereignisse) wird mehr für MultiTouch benötigt, oder um zu erkennen, dass es kein mouseLeave-Ereignis nach einem Klick-Ereignis über eine Touch-Schnittstelle gibt (irgendwie?...). Meine andere Erwartung wäre, wenn ich keine Maus für Mausereignisse verarbeite oder einen registrierten Listener habe, aber für Berührungsereignisse und umgekehrt, würden verschiedene Ereignisse gesendet oder gesendet werden, je nachdem, was gehört oder abgefangen wurde (false zurück? oder um Blasenbildung über preventDefault etc) zu stoppen.

Wie auch immer, es erscheint mir zur Zeit, dass Sie beide Arten von Ereignissen in zufälliger nicht zusammenhängender unvorhersehbarer Weise behandeln müssen, was für mich bedeutet, was in einer Mauswelt am besten als 'Über'-Ereignisse auf berührungsempfindlichen Geräten beschrieben wird.

Grundsätzlich denke ich, eine Berührung sollte nicht ein Über/Enter-Ereignis senden, während ein Klick sollte auch zu berühren, und wenn ich für berühren berühren preventDefault sollte besagte mouseEvents abgebrochen werden.

Wie auch immer, es macht am meisten Sinn beide zu senden und lass es mich aussortieren. Die Verwirrung, die ich vermute, besteht darin, dass Sie nur die Hälfte der Ereignisse hören, die gesendet werden (fehlende Berührung). ... so viel Glück! Mögen diese Gedanken jemandem helfen, sich mit dem Durcheinander zu befassen, entweder auf der höheren oder auf der unteren Ebene der Entwicklerteams. (Ist das der Browserlevel schuld? Ich denke schon.)

Verwandte Themen