2013-01-01 10 views
7

Właściwość zdarzenia z kółkiem myszy target zapewnia element DOM, nad którym obecnie znajduje się wskaźnik myszy, gdy obsługiwane jest koło myszy (lub touchpad z obsługą gestów).Dlaczego właściwość target zdarzenia kółka myszy różni się od zdarzeń innych zdarzeń (kliknięcie, mousedown, dotykowy)?

Kiedy to zrobię (przynajmniej w Safari 6, później przetestuję inne przeglądarki) Otrzymam węzeł tekstu jako target.

Nie dzieje się tak z innymi zdarzeniami, które zawsze tworzą węzeł nietekstowy, nawet jeśli wykonuję akcję bezpośrednio nad tekstem.

Nie trzeba dodawać, że kod jest bardziej skomplikowany niż w innych przypadkach.

Czy istnieje ku temu powód? Chciałbym uniknąć konieczności sprawdzania węzła nadrzędnego, choć na szczęście miłą rzeczą w tej sytuacji jest to, że potrzebowałbym tylko sprawdzić rodzica węzła target.

Nie mogę zdecydować, czy jest to funkcja, czy błąd.

+0

wydaje się zdarzyć tylko w Chrome/Safari .. oto jsfiddle który kiedyś przetestować ten http: // jsfiddle .net/sbrjL/.. co ciekawe, jeśli zrobisz kółko myszy na dopełnieniu div (lub gdziekolwiek bez tekstu), zwróci on element jako cel .. czy możesz użyć słowa kluczowego 'this' zamiast' event.target' ? – lostsource

+1

To jest znormalizowane przez jQuery z powodu "błędu Safari". – pimvdb

+0

@pimvdb, jeśli wykopiesz źródło, które oznacza, że ​​zaakceptuję to jako odpowiedź. –

Odpowiedz

5

Oto a snippet kodu jQuery, gdzie normalizacji tego problemu, ponieważ jest to błąd:

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