2016-10-17 2 views
0

특정 조건에서 Safari가 iOS 장비에서 수신 거부되는 것을 방지하기 위해 touchStart 이벤트를 방지하고 싶습니다.touchStart 방지 및 클릭 이벤트 허용

$('.wrapper').on('touchstart', function(e) { 
    e.preventDefault(); 
}); 

하지만 지금은 클릭 이벤트 중 누구도 그것에 작동하지 :

$('.wrapper').on('click', function() { 
    $('.wrapper').text('Click fired'); 
}); 

Reproduction online

나는 click을 대체 할 수

그래서이 (가) folowing 사용하고 수행하려면 다른 이벤트에 대한 이벤트. 이것은 최종 사용자로부터 온 것일 수 있습니다.

iOS 10 이전 버전에서는 수신 거부 could be avoided by preventing only touchMove이 있었지만 iOS 10 이후에는 touchStart도 차단되지 않는 한 바운스됩니다.

touchStart 이벤트 만 방지하고 click 이벤트를 사용할 수있는 방법이 있습니까?

답변

1

내가 테스트 드라이브를위한 아이폰 OS 10을 사용할 수없는, 그리고 이것은 추측이지만,이 조각을 확인하십시오

$('.wrapper').on('click touchstart', function(e) { 
 
    if (e.type != 'click') { 
 
    e.preventDefault(); 
 
    } else { 
 
    $('.wrapper').text('Click fired'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="wrapper">asd</div>

+0

Nop는, 작동하지 않습니다. 'click' 전에는 언제나'touchStart'를 해고하는 것 같습니다. 따라서 클릭을 방지합니다. – Alvaro

+0

'mousedown '으로'click'을 변경하는 것은 어떻습니까? – Dekel

+0

내가 말했듯이 그건 옵션이 아닙니다. 개발자는 원하는 모든 이벤트를 사용할 수 있으며 '클릭'을 사용할 가능성이 큽니다. 해결 방법을 찾았습니다. 하지만 해킹처럼 보입니다. DI가 기본 이벤트를 차단 한 후에 이벤트 대상에서 클릭 이벤트를 트리거합니다. https://jsfiddle.net/8n47whd0/5/ – Alvaro

관련 문제