2013-01-01 24 views
7

La proprietà target dell'evento della rotellina del mouse fornisce l'elemento DOM su cui il mouse sta attualmente passando il mouse mentre viene utilizzata la rotellina del mouse (o il touchpad abilitato per i gesti).Perché la proprietà target dell'evento della rotellina è diversa da quella di altri eventi (clic, mouse, touchstart)?

Quando eseguo questa operazione (almeno in Safari 6, testerò altri browser in un secondo momento). Avrò il nodo di testo stesso come target.

Questo non accade mai con altri eventi che producono sempre un nodo non di testo anche se eseguo l'azione direttamente sul testo.

Inutile dire che rende il codice più complesso di altrimenti.

C'è una ragione per questo? Mi piacerebbe evitare di dover controllare il nodo genitore, anche se per fortuna la cosa bella di questa situazione è che avrei solo bisogno di controllare il genitore del nodo target.

Non riesco a decidere se questa è una funzionalità o un bug.

+0

sembra accadere solo in Chrome/Safari .. ecco una jsfiddle che ho usato per testare questo http: // jsfiddle .net/sbrjL/.. interessante se si fa una rotellina del mouse sul padding del div (o ovunque senza testo) restituirà l'elemento come target .. si può usare la parola chiave 'this' invece di' event.target' ? – lostsource

+1

Ciò è normalizzato da jQuery a causa di "un bug di Safari". – pimvdb

+0

@pimvdb se si scava la fonte che indica che accetterò come risposta. –

risposta

5

Ecco a snippet del codice jQuery dove normalizzare questo comportamento, perché è un bug:

// Target should not be a text node (#504, Safari) 
if (event.target.nodeType === 3) { 
    event.target = event.target.parentNode; 
} 
Problemi correlati