2012-07-11 19 views
6

Have a look w tym jsFiddlemouseenter/wydarzenia mouseLeave nie wypalanie elementów SVG korzystających jQuery.on

mouseenter/mouseleave nie wydają się być poprawnie wypalania przy użyciu jQuery w połączeniu z SVG (Raphael 2.0). Wiem, że po wyjęciu z pudełka SVG jQuery nie jest w 100% kompatybilny z SVG, jednak, o ile widzę, wydaje się, że tylko efekt IE9.

Dziwne, jeśli szybko włączysz/wyłączysz myszką element svg (upewniając się, że robisz to od razu przy okienku HTML) i wracając do niego zdarzenia są uruchamiane (ale nie za każdym razem). Aby upewnić się, że nie był to ogólny problem z on, podłączyłem wydarzenie click, które działa dobrze, za każdym razem.

Zastanawiasz się, czy ktoś wie, czy to błąd, czy nawet znany problem?

+0

działa dla mnie (chrom) –

+0

@StefanFandler - "* O ile widzę, to tylko wydaje się wpływać na IE9 *". Tagowane w celu wyjaśnienia. – James

+0

Unikałem używania jQuery w połączeniu z SVG jak zarazy. Jest to pole minowe pełne wyjątków takich jak ten. Myślę, że Twój błąd jest związany z tym http://forum.jquery.com/topic/1-6-2-broke-svg-hover-events (nierozwiązanym dwa lata temu). – Duopixel

Odpowiedz

2

To jest błąd w wersji 1.7.2. Zobacz ticket.

Problem znika, jeśli używam jQuery (edge), więc powinien zostać naprawiony w następnym zaplanowanym wydaniu (1.8).

0

Myślę, że ważne jest, aby pamiętać, że z jQuery 1.8.2 i Android przez phonegap nie używany jq-mobile. Widzę zdarzenia dotykowe i myszy losowo wybrane i niezsynchronizowane ... czyli subtelne wywoływanie różnicy mouseEnter i kliknięcie w porównaniu z innym wyzwalaniem dotykowym touchStart (czasami, jeśli nie wprowadzono żadnego nawet obecnie wysłano mouseEnter), a następnie 2 touchEnds. Jeśli miałeś wyzwolić touchEvent mouseEnter drugi wzór dotykowy (początek, koniec, koniec) wysyła mouseLeave (zakładając, że nie losowo poprzez subtelne różnice w dotknięciu wywołają kliknięcie).

Moje oczekiwanie było, że powinny być wyzwalane razem w obu sytuacjach, z wyjątkiem jednej (zdarzenia dotykowe) jest używana bardziej dla potrzeb multiTouch, lub do rozpoznania, że ​​nie będzie zdarzenia mouseLeave po zdarzeniu kliknięcia symulowanym przez interfejs dotykowy (jakoś?...). Moje inne oczekiwanie byłoby, gdybym nie przetwarzał lub nie miał zarejestrowanego detektora dla zdarzeń myszy, ale robię dla zdarzeń dotykowych i na odwrót, różne zdarzenia byłyby lub nie byłyby wysyłane w zależności od tego, co słuchano lub przechwytywano (return false? lub aby zatrzymać bulgotanie poprzez preventDefault itp.).

W każdym razie wydaje mi się, że obecnie musisz radzić sobie z obydwoma rodzajami zdarzeń w losowy, nieprzewidywalny, nieprzewidywalny sposób, co dla mnie oznaczało odrzucanie tego, co w świecie myszy najlepiej opisuje się jako zdarzenia "over" na urządzeniach obsługujących dotyk.

Zasadniczo myślę, że dotknięcie nie powinno wysyłać zdarzenia typu nadpisywanie/wprowadzanie, natomiast kliknięcie powinno również oznaczać dotknięcie, a jeśli jestem słuchany za dotknięcie, zapobieganie powinno anulować wspomniane zdarzenia mouseEvent.

W każdym razie najlepiej jest wysłać oba i pozwolić mi to rozwiązać. Zamieszanie, o którym podejrzewam, polega na tym, że słuchasz tylko połowy wysyłanych zdarzeń (brakujące dotknięcie). ... więc powodzenia! może te myśli pomagają komuś uporać się z bałaganem na wyższych lub niższych poziomach zespołów programistycznych. (Czy to na poziomie przeglądarki winę? Myślę, że tak.)

Powiązane problemy