2012-07-11 16 views
6

dare un'occhiata a questo jsFiddleMouseEnter/eventi MouseLeave non sparare per gli elementi SVG usando jQuery.on

Il mouseenter/mouseleave non sembrano essere sparando correttamente quando si utilizza jQuery in combinazione con SVG (Raffaello 2.0). So che out of the box SVG jQuery non è compatibile al 100% con SVG, tuttavia, per quanto posso vedere, sembra che abbia effetto solo su IE9.

La cosa strana è se si muove rapidamente il mouse sopra/fuori dall'elemento svg (assicurandosi di essere appena usciti dal pannello HTML nel farlo) e di nuovo su di esso gli eventi si attivano (ma non sempre). Solo per assicurarmi che non si sia verificato un problema generale con on ho collegato l'evento click che funziona correttamente ogni volta.

Basta chiedersi se qualcuno sa se questo è un bug o anche un problema noto?

+0

funziona per me (cromo) –

+0

@StefanFandler - "* per quanto posso vedere sembra influire solo su IE9 *". Tagged per chiarimenti. – James

+0

Evito di usare jQuery in congiunzione con SVG come la peste. È un campo minato pieno di eccezioni come questa. Penso che il tuo bug sia legato a questo http://forum.jquery.com/topic/1-6-2-broke-svg-hover-events (non risolto da due anni fa). – Duopixel

risposta

2

Questo è un bug in 1.7.2. Vedi ticket.

Problema se si utilizza jQuery (bordo), quindi dovrebbe essere risolto nella successiva versione pianificata (1.8).

0

Penso che sia importante notare che con jQuery 1.8.2 e Android tramite phonegap non è utilizzato jq-mobile. Vedo eventi touch e mouse selezionati in modo casuale e non sincronizzati ... significa differenza sottile trigger mouseEnter e clic confrontati con un altro tocco di attivazione touchStart (a volte se non è stato inserito alcun invio è stato inviato un mouse) quindi 2 toccoEnds. Se avevi un touchEvent innescare un mouseInserisci il secondo modello di tocco (inizio, fine, fine) invia un mouseLeave (supponendo che non lo fai casualmente tramite sottili differenze di tocco innesca una combinazione di clic).

Mi aspettavo che si attivassero insieme in entrambe le situazioni tranne una (gli eventi di tocco) sono utilizzati di più per le esigenze multiTouch o per riconoscere che non ci sarà un evento mouseLeave dopo un evento click simulato tramite un'interfaccia touch (in qualche modo?...). La mia altra aspettativa sarebbe se non elaboro o abbia un listener registrato per gli eventi del mouse ma lo faccio per gli eventi touch e viceversa, diversi eventi sarebbero o non verrebbero inviati a seconda di cosa ascoltato o intercettato (return false? o per interrompere il bubbling tramite preventDefault ecc.).

In ogni caso mi pare attualmente è necessario gestire entrambi i tipi di eventi casuali modi imprevedibili non connessi, che per me significava scartando ciò che in un mondo del mouse è meglio descritta come 'over' eventi in dispositivi in ​​grado touch.

Fondamentalmente sto pensando che un tocco non dovrebbe inviare un evento di over/invio, mentre un clic dovrebbe essere pari a toccare, e se sto ascoltando per toccare preventDefault dovrebbe annullare detto mouseEvents.

In ogni caso ha più senso inviare entrambi e lasciarmi risolvere. La confusione che sospetto è che tu stia ascoltando solo la metà degli eventi che sta inviando (tocco mancante). ... quindi buona fortuna! questi pensieri possono aiutare qualcuno a gestire il pasticcio sia nei team di livello superiore che in quelli di livello inferiore. (È il livello del browser da incolpare? Penso di sì.)

Problemi correlati