Широкое применение мобильных устройств для доступа в интернет накладывает свои специфические требования на разработку веб-сайтов. Привычный обработчик onclick может срабатывать совместно с ontouchstart, а может не срабатывать вовсе на мобильном устройстве.
Но вам скорее всего нужно фиксировать лишь факт нажатия пользователя на элемент, причем однократно.
Наверное, стоит начать с того как отличить какое событие произошло на самом деле, это можно подсмотреть в атрибутах объекта event:
1 2 3 4 5 6 |
$('...').on('click touchstart', function(event) { if (event.type == "touchstart") { alert('Был касание'); } else { alert('Был клик'); } }); |
Если происходят оба события, а код выполнить необходимо лишь один раз, то нужно как то сообщить следующему обработчику, что работа уже выполнена.
Функция event.stopPropogation(), остановит передачу обработки в родительский контейнер и нам не подходит.
Функция event.stopImmediatePropagation(), прекратит обработку текущего типа события, если обработчиков несколько, но события другого типа сработают.
Можно использовать какую то глобальную переменную или добавить признак в объект event, чтобы прочитать его в следующем обработчике. Это рабочие варианты, но есть более элегантное решение:
1 2 3 4 5 6 |
$('...').on('click touchstart', function(event) { // ваш код ... // вернем false, чтобы остановить всю очередь обработки событий контейнера return false; }); |
В большинстве случаев это наиболее простой вариант.