2011-10-07 20 views
8

Estoy intentando implementar un menú para una aplicación ios basada en webkit en la que el usuario toca/hace clic y mantiene un botón de menú ('.menu_item'), después de 500ms se abre el submenú (div.slide_up_sub_menu) y un usuario debería poder deslizar su dedo/mouse hasta un elemento del submenú li y soltarlo.evento touchend en ios webkit no está activando?

<li class="menu_item"> 
     ASSET MANAGEMENT 
     <div class="slide_up_sub_menu hidden_menu"> 
     <ul class="submenu"> 
      <li>Unified Naming Convention</li> 
      <li>Version Control</li> 
     </ul> 
     </div> 
    </li> 

La aplicación debería ser capaz de detectar en qué submenú se activó el evento touchend/mouseup. Estoy vinculando un evento de inicio táctil con el elemento del menú, esperando 500 ms, y luego diciendo al submenú que se muestre. Cuando un usuario suelta su dedo, un evento touchend debe iniciarse cerrando el submenú. Si el usuario ha detenido su toque en un elemento del submenú, debe ser detectado. Actualmente la detección de qué elemento de submenú mouseup un evento ocurrido en las obras en Safari en el escritorio:

$('ul.submenu li').live('mouseup', function(e){ 
    console.log($(e.currentTarget)); //works on the desktop 
}); 

pero si lo hago la misma utilizando un controlador touchend no funciona en un iPad:

$('ul.submenu li').live('touchend', function(e){ 
    console.log($(e.currentTarget)); //never fires 
}); 

si miro para cada evento touchend puedo obtener una referencia al elemento de submenú padres cuando termino el toque en un elemento de submenú:

$(document.body).bind('touchend', function(e) { 
    console.log($(e.target).html()); //logs ASSET MANAGEMENT 
}); 

pero ninguna referencia al elemento de submenú.

¿Alguien tiene alguna idea de por qué un evento touchend no se activa en los elementos del submenú?

Gracias

Respuesta

0

Si no es necesario utilizar los datos multi-touch, puede seguir usando mouseup en IPAD.

lectura adicional: http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html

+0

Gracias por la respuesta, desafortunadamente, el evento de mousedown no se dispara inmediatamente cuando toca la pantalla. Dispara solo después de que su dedo sale de la pantalla en tándem con el evento mouseup. http://www.quirksmode.org/blog/archives/2008/08/iphone_events.html – Craig

3

Tal vez sea un poco tarde para contestar. Este evento nunca se disparará, porque los eventos táctiles se activan en el mismo elemento en el que se activó la entrada táctil. Por lo tanto, para hacer lo que quiera, una solución es utilizar el método document.elementFromPoint, al que enviará las coordenadas xey adecuadas.

16

touchend no se activa porque touchcancel se ha activado anteriormente. Si quieres táctil completa Evens manejo es necesario llamar a

e.preventDefault() 

en la devolución de llamada de evento "touchmove", de lo contrario cuando se produce un evento touchmove si el navegador decide que este es un evento de desplazamiento que se disparará touchcancel y nunca fuego touchend.

Cuestiones relacionadas