2012-02-20 8 views
9

Gdy użytkownik wyświetli kliknięć na obrazie, zostanie wywołane zdarzenie . Jednak, gdy ktoś dotknie obrazu, zostanie wywołane to samo zdarzenie click, nawet jeśli dostępne jest również zdarzenie touchstart.Czy istnieje sposób, że zdarzenie początkowe dotyku nie spowoduje zdarzenia kliknięcia?

Podoba mi się inne zachowanie dla rzeczywistego zdarzenia typu kliknięcie (myszka) i zdarzenia dotyku. Dziwne jest to, że nawet zdarzenie mouseup jest wyzwalane, gdy jest używane na smartfonie. Czy mimo to można oddzielić mysz od zdarzeń dotykowych?

Odpowiedz

9
event.preventDefault(); 

wystarczyły nadzieję, że to pomaga ludziom!

+0

To nie zadziała, jeśli dodajesz 'event.preventDefault()' do wywołania zwrotnego 'touchstart'. Przynajmniej nie w linkach w Safari na iOS 8.4. Będziesz musiał dodać go do obsługi zdarzenia 'click'. –

1

można znormalizować zdarzenie ..

Zobacz moją odpowiedź na to pytanie:

Click event called twice on touchend in iPad

Można również szukać w kodzie źródłowym mobilna jQuery szukać inspiracji: http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.js Zacznij od linii 982

/* 
* "events" plugin - Handles events 
*/ 

(function($, window, undefined) { 

// add new event shortcuts 
$.each(("touchstart touchmove touchend orientationchange throttledresize " + 
        "tap taphold swipe swipeleft swiperight scrollstart scrollstop").split(" "), function(i, name) { 

    $.fn[ name ] = function(fn) { 
     return fn ? this.bind(name, fn) : this.trigger(name); 
    }; 

    $.attrFn[ name ] = true; 
}); 
.... 

spojrzenie na wydarzenia z kranu (linia 1049)

$.event.special.tap = { 
+0

Dzięki za dokładną odpowiedź. Jedyną rzeczą jest, że teraz celujesz w "specjalne urządzenia", w tym przypadku iPhone. Raczej chcę, aby wszystkie urządzenia obsługujące dotykowy dotyk traktowały kliknięcie i dotykowy inny. Szkoda, że ​​nie było prostego zestawu, który można wyłączyć. – Mark

Powiązane problemy