2012-12-30 8 views
5

Qualcuno sa perché un evento touchend potrebbe sparare durante un evento touchstart? Questo succede solo la seconda volta.Touchend spara su touchstart seconda volta intorno a

Un frammento di codice rapido:

function touchstart (event) { 
    $(event.target).one('touchend', function() { 
     alert('fired'); 
    } 
} 

Così la prima volta che questo viene sparato funziona benissimo. La seconda volta attiva l'avviso su touchstart.

http://jsfiddle.net/8SVFR/

Edit:

Sembra che questo potrebbe essere un problema solo iPhone

+0

Stiamo parlando del browser del cellulare? Funziona perfettamente sul mio browser nativo per Android 4.1. –

+0

Funziona bene anche su Chrome e Firefox (mobile) su Android 4.1. –

+0

Solo provato su iPhone e si accende su touchstart la seconda volta intorno a – darylhedley

risposta

5

Risulta ... avendo un fuoco avviso in un evento touchend provoca problemi di ogni genere. Quando si fa clic su "ok", si attiva il touchstart in modo che il touchend venga attivato la prossima volta che si tocca l'elemento. Fortunatamente stavo usando l'avviso per controllare il mio codice - così una volta che questo è stato rimosso il mio codice ha funzionato perfettamente!

+0

trascorso la scorsa notte il debug di questo problema - funziona bene in Chrome con l'emulazione touch, innesca la richiamata due volte su iPhone. – Paul

1

Basta inserire il codice del gestore "touchend" in setTimeout con 0ms. In questo modo:

$(someElement).on("touchend", 
function(){ 
    setTimeout(function(){ 
    /*Your code*/ 
    }, 0); 
});