2010-05-19 13 views
15

Perché quando lego jQuery bind l'oggetto evento che ottengo è diverso dall'oggetto evento che torno usando addEventListener?Perché l'oggetto evento è diverso da jquery bind vs. addEventListener

L'oggetto evento risultante da questo bind jQuery non ha la matrice targetTouches (tra le altre cose) ma l'evento da addEventListener lo fa. Sono io o qualcosa che non è proprio qui?

$(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

Puoi pubblicare il codice che comporta la creazione della variabile targetTouches? – ground5hark

+0

@bobthabuilda: 'targetTouches' è una proprietà degli eventi' touch' che sono disponibili se non ricordo male, solo su Safari/WebKit (molto comune nelle app di iPhone). – CMS

risposta

24

Questo perché jQuery utilizza il proprio Event model.

jQuery semplicemente copia e normalizza alcune proprietà dall'evento originale, all'oggetto evento che si ottiene come primo argomento del gestore.

Le proprietà copiate si basano su DOM Level 3 Events Spec.

per ottenere l'oggetto evento originale, è possibile:

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

La proprietà originalEvent è accessibile e che funziona, ma non è documentato, si può vedere come è impostato dietro le quinte nel costruttore jQuery.Event.

+0

La proprietà 'originalEvent' è documentata su http://api.jquery.com/category/events/event-object/ in" proprietà speciali ". –

+0

@Mathias: Grazie, aggiornerò il post in seguito, la proprietà non è stata documentata [nel 2010] (http://replay.web.archive.org/20100827151056/http://api.jquery.com/ categoria/eventi/event-oggetto /). – CMS

+0

Certo, stavo solo aggiungendo il link alla tua risposta per riferimento futuro ora che è finalmente documentato (non sono sicuro quando è successo esattamente). Grazie per aver modificato il tuo post :) –

Problemi correlati