2016-10-17 3 views
0

Я бы хотел предотвратить события touchStart, чтобы Safari не подпрыгивал на устройствах iOS при определенных условиях.Предотвратите touchStart, но разрешите события click

Для этого я использую на следующие:

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

Но теперь ни один из событий щелчка не работает на нем:

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

Reproduction online

Я не могу заменить click событие для любого другого. Поскольку это может исходить от конечного пользователя.

Раньше в iOS 10, подпрыгивая could be avoided by preventing only touchMove, но так как iOS 10 будет отскакивать, если touchStart также не включен.

Есть ли способ предотвратить только событие touchStart, но разрешить использование события click?

ответ

1

Я не IOS 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, не работает. Кажется, всегда срабатывает 'touchStart' перед' щелчком'. Поэтому он предотвращает щелчок. – Alvaro

+0

Как насчет изменения 'click' в' mousedown'? – Dekel

+0

Как я уже сказал, это не вариант. Разработчики могут использовать любое событие, которое они хотят, и, вероятно, будут использовать 'click'. Обнаружил работу. Но выглядит скорее как хак: DI запускает событие клика на целевой цели после предотвращения по умолчанию: https://jsfiddle.net/8n47whd0/5/ – Alvaro

Смежные вопросы