2010-05-19 12 views
15

Dlaczego to jest, gdy używam powiązania jQuery, obiekt zdarzenia, który otrzymuję, różni się od obiektu zdarzenia, który otrzymuję za pomocą metody addEventListener?Dlaczego obiekt zdarzenia jest inny niż powiązanie jquery vs. addEventListener

Obiekt zdarzenia wynikający z tego powiązania jQuery nie ma tablicy targetTouches (między innymi), ale zdarzenie z addEventListener ma. Czy to ja, czy coś tu jest nie tak?

$(document).ready (function() { 
    $("#test").bind("touchmove", function (event) { 
     console.log(event.targetTouches[0].pageX); 
     // targetTouches is undefined 
    }); 
}); 

vs.

$(document).ready (function() { 
    var foo = document.querySelectorAll('#test') 
    foo[0].addEventListener('touchmove', function (event) { 
     console.log(event.targetTouches[0].pageX); 
     // returns the correct values 
    }, false); 
}); 
+0

Czy możesz opublikować kod, który dotyczy utworzenia zmiennej targetTouches? – ground5hark

+0

@bobthabuilda: 'targetTouches' jest właściwością zdarzeń' touch', które są dostępne, jeśli dobrze pamiętam, tylko w Safari/WebKit (bardzo popularne w aplikacjach na iPhone'a). – CMS

Odpowiedz

24

To dlatego jQuery używa własnego Event model.

jQuery po prostu kopiuje i normalizuje niektóre właściwości z oryginalnego zdarzenia, do obiektu zdarzenia, który otrzymasz jako pierwszy argument procedury obsługi.

Skopiowane właściwości są oparte na DOM Level 3 Events Spec.

Aby uzyskać oryginalny obiekt zdarzenia można:

$(document).ready (function() { 
    $("#test").bind("touchmove", function (event) { 
     var e = event.originalEvent; 
     console.log(e.targetTouches[0].pageX); 
    }); 
}); 

Obiekt originalEvent jest dostępny i to będzie działać, ale nie jest udokumentowane, można zobaczyć, jak to ustawić za kulisami w konstruktorze jQuery.Event.

+0

Właściwość 'originalEvent' jest udokumentowana na http://api.jquery.com/category/events/event-object/ pod" specjalnymi właściwościami ". –

+0

@Mathias: Dzięki, zaktualizuję wpis później, właściwość nie została udokumentowana [w 2010 roku] (http://replay.web.archive.org/20100827151056/http://api.jquery.com/ kategoria/zdarzenia/event-obiekt /). – CMS

+0

Oczywiście po prostu dodałem link do twojej odpowiedzi na przyszłość, teraz, gdy jest on w końcu udokumentowany (nie jestem pewien, kiedy dokładnie to się stało). Dziękuję za edytowanie Twojego wpisu :) –

Powiązane problemy