2015-11-10 8 views
6

Zajmuję się tworzeniem aplikacji JavaScript, która musi działać zarówno w IE11, jak i Edge. W IE11, łańcuch zdarzeń widzę (skopiowane z https://patrickhlauke.github.io/touch/tests/results/) jest następujący:Zapobieganie klikaniu podczas używania zdarzeń wskaźnika w IE11?

pointerover> mouseover> pointerenter> mouseenter> pointerdown> mouseDown> (pointermove> mousemove) +> pointerup> mouseUp> (lostpointercapture)> pointerout> mouseout> pointerleave> mouseLeave> ostrości> kliknij

Aplikacja jest już podłączone do obsługi myszy i dotykowe wydarzenia, więc wzywam preventDefault() na wszystkich imprezach wskaźnik, aby anulować odpowiednie zdarzenie myszy. Niestety kliknięcie pojawia się na końcu i powoduje problemy. Czy są jakieś wbudowane w celu wyłączenia zdarzenia kliknięcia z wypalania na końcu?

+2

spróbuj dodać 'pointer-events: none' – maioman

+0

Dodanie wskaźnika-wydarzenia: brak wydaje się wyłączyć wszystko. Nie jestem pewien, czy tak się właśnie stało, ale niestety potrzebuję zdarzeń wskaźnika (polifilizowaliśmy je i traktowaliśmy jako wydarzenia dotykowe w naszych widżetach). Muszę zachować wskaźniki, ale zignorować kliknięcie na końcu łańcucha. –

Odpowiedz

0

Używam zdarzeń Pointer jQuery Polyfill (https://github.com/jquery/PEP) do używania zdarzenia "pointerup" w przeglądarkach Webkit i napotkałem podobny problem. W moim przypadku musiałem uniemożliwić śledzenie linku.

Rozwiązałem problem, dodając detektor zdarzeń "kliknięcie" zaraz po wywołaniu "pointerup", a następnie zapobiegając zdarzeniu "kliknięcie" i usuwając jego słuchacza. Tak:

var myLink = document.getElementsByClassName("myLink")[0]; 

myLink.addEventListener("pointerup", handleLinkPress); 

function handleLinkPress(evt) { 
    // do something here... 

    evt.target.addEventListener("click", unfollowLink); 

    function unfollowLink(evt) { 
     evt.preventDefault(); 
     evt.target.removeEventListener("click", unfollowLink); 
    } 
} 
Powiązane problemy