2009-03-22 22 views
6

Estoy vinculando eventos en vivo en enlaces en mi aplicación PhoneGap. El evento se dispara con éxito (confirmado por alert() ing), pero parece que los datos táctiles no se adjuntan al objeto del evento como debería ser. Esto sucede en todos los eventos táctiles: touchstart, touchmove y touchend.jQuery live() eliminando los atributos del evento iPhone touch?

$('a').live('touchend', function(event) { 
    event.preventDefault(); 
    alert(event.touches.length); // event.touches should be populated! 
}); 

¿Alguna idea? ¿Soy SOL con jQuery.live()?

Respuesta

2

Los eventos táctiles no son compatibles actualmente con Events/live.

De la documentación:

posibles valores de evento: clic, dblclick, mousedown, mouseup, mousemove, al pasar el ratón, mouseout, keydown, pulsación de tecla, keyUp

Actualmente no soportados: mancha, enfoque, MouseEnter, mouseleave, cambio, presentar

Es posible que desee considerar tratando de utilizar haga clic en si que se adapte a sus necesidades, o puede cambiar a usar livequery, que probablemente lo respalde. (livequery es en lo que se basaba originalmente Live, no estoy seguro de por qué no admite todos los mismos eventos)

+0

Voy a tratar de salir livequery, gracias. Imaginé que los eventos táctiles estaban siendo detectados, que estaban bien respaldados, pero creo que debe pasar algo extra para transmitir todos los atributos del evento. – ceejayoz

+0

Creo que Livequery usa temporizadores y es por eso que puede soportar mucho más. El equipo de jQuery usó un método diferente que es más eficiente, pero también limitado. – Jab

16

En realidad, puede usar el método .live. No tiene la propiedad event.touches debido a la forma en que jQuery maneja los eventos internamente. Para "arreglar" eventos, jQuery clona el evento. Al hacerlo, solo copia en un número limitado de propiedades por motivos de rendimiento. Sin embargo, aún puede acceder al objeto de evento original a través de la propiedad event.originalEvent.

lo tanto, su código de ejemplo tendría que ser similar al siguiente:

$('a').live('touchend', function(event) { 
    event.preventDefault(); 
    console.log(event.originalEvent.touches.length); 
}); 

Estas son las propiedades que se copian sobre: ​​http://github.com/jquery/jquery/blob/master/src/event.js#L411

+0

Esto parece ser cierto en el nuevo jQuery 1.4. No fue el caso en 1.3. – ceejayoz

+1

jQuery 1.3.x tenía el mismo comportamiento, copiar un número determinado de propiedades comunes y exponer el evento original como una propiedad originalEvent. Fuente relevante: http://github.com/jquery/jquery/blob/1.3/src/event.js#L282 –