jQuery live () la suppression des attributs d'événement tactile iPhone?
Question
Je lient des événements en direct sur les liens dans mon app PhoneGap. L'événement ne se déclenche avec succès (confirmé par alert()
ING), mais il semble les données toucher est pas attaché à l'objet de l'événement comme il devrait être. Cela se produit sur tous les événements tactiles -. touchstart
, touchmove
et touchend
$('a').live('touchend', function(event) {
event.preventDefault();
alert(event.touches.length); // event.touches should be populated!
});
Toutes les idées? Suis-je SOL avec jQuery.live ()?
La solution
Les événements tactiles ne sont pas actuellement pris en charge par Événements / direct .
De la documentation:
valeurs d'événement possible: cliquez, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup
pas pris en charge: flou, mise au point, mouseenter, mouseleave, changement, soumettre
Vous voudrez peut-être envisager d'essayer d'utiliser cliquez si cela correspond à vos besoins, ou vous pouvez passer à l'aide de livequery, qui sera probablement le soutenir. (Livequery est ce qui a été à l'origine basé sur, je vis ne sais pas pourquoi il ne supporte pas tous les mêmes événements)
Autres conseils
En fait, vous pouvez utiliser la méthode .live. Vous n'avez pas la propriété event.touches en raison de la façon dont les événements gère jQuery en interne. Pour les événements « corriger », clones jQuery l'événement. Ce faisant, il ne copie que sur un nombre limité de propriétés pour des raisons de performance. Cependant, vous pouvez toujours accéder à l'objet d'événement d'origine via la propriété event.originalEvent.
Ainsi, votre exemple de code devrait ressembler à ce qui suit:
$('a').live('touchend', function(event) {
event.preventDefault();
console.log(event.originalEvent.touches.length);
});
Voici les propriétés qui sont copiés: http: / /github.com/jquery/jquery/blob/master/src/event.js#L411