2012-12-30 22 views
5

Czy ktoś wie, dlaczego zdarzenie touchend będzie strzelać podczas zdarzenia touchstart? Dzieje się tak tylko za drugim razem.Touchend pożary na touchstarcie po raz drugi około

Kod szybkie urywek:

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

Więc po raz pierwszy ten jest zwolniony to działa dobrze. Drugi raz uruchamia alert o dotknięciu dotykowym.

http://jsfiddle.net/8SVFR/

Edit:

Wygląda na to może być problemem tylko iPhone

+0

Czy mówimy o przeglądarce telefonu komórkowego? Działa dobrze na mojej macierzystej przeglądarce systemu Android 4.1. –

+0

Działa również w Chrome i Firefoxie (na urządzenia mobilne) w systemie Android 4.1. –

+0

Wypróbowałem tylko na iPhonie i odpaliłem na touchstarcie za drugim razem około – darylhedley

Odpowiedz

5

Okazuje się ... poprzez powiadomienie ogień w razie touchend powoduje różnego rodzaju problemy. Kiedy klikniesz "OK", wystrzeliwany zostanie touchstart, tak aby touchend został odpalony przy następnym dotknięciu elementu. Na szczęście użyłem tego alertu do sprawdzenia mojego kodu - więc gdy ten został usunięty, mój kod działał idealnie!

+0

spędził ostatniej nocy debugowania tego problemu - działa dobrze w Chrome z emulacją dotykową, wyzwala dwa razy callback na iphone. – Paul

1

Po prostu włóż kod "touchend" handler w setTimeout z 0ms. W ten sposób:

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