Как заставить мою функцию 'click' работать с iOS

У меня есть набор Div, которые действуют как кнопки. Эти кнопки имеют простую функцию jquery click(), которая работает во всех браузерах, кроме iOS.

Например:

<div class="button">click me</div>

и

$('.button').click(function(){

   alert('hi');

});

Я не уверен, почему это не работает на iOS - очевидно, что в iOS нет "щелчка".

К сожалению, у меня нет устройства iphone, чтобы проверить это самостоятельно, но у меня появилось много жалоб от моих клиентов, которые хотят нажимать на вещи, и ничего не происходит.

Каков ключ к получению этой работы?

Ответы

Ответ 1

Click": означает, когда событие mousedown и mouseup происходит в одном элементе ИЛИ элемент активируется клавиатурой.

from JQuery Bug, есть работа, просто добавьте "cursor: pointer" к элементу CSS, и событие click будет работать должным образом. и вы даже можете увидеть этот Jquery щелчок на Ios для справки

Ответ 2

Собственно, принятый ответ не помог мне. Я попытался использовать "cursor: pointer", onclick = "" и даже преобразовать элемент в тег привязки.

Что я сделал, чтобы заставить его работать, это связать событие touchstart с событием click. Чтобы заставить его работать на всех платформах, я должен был уродливый ua spoofing вот так:

var ua = navigator.userAgent,
event = (ua.match(/iPad/i) || ua.match(/iPhone/)) ? "touchstart" : "click";

jQuery("body").on(event, '.clickable_element', function(e) {
    // do something here
});

Ответ 3

Основываясь на Marek answer, я беру его на себя (он немного убирается):

var ua = navigator.userAgent, 
pickclick = (ua.match(/iPad/i) || ua.match(/iPhone/)) ? "touchstart" : "click";

$('.clickable_element').on(pickclick, function(e) {
     // do something here
});

В отрасли все еще много работы, когда дело доходит до стандартов...

EDIT:

Не работает на телефонах Android. Принял более жесткий подход:

if (document.documentElement.clientWidth > 1025) { pickclick = 'click' }
if (document.documentElement.clientWidth < 1025) { pickclick = 'touchstart' }

$('.clickable_element').on(pickclick, function(e) {
     // do something here
});

Ответ 4

Вы можете использовать это:

$('button').bind( "touchstart", function(){
    alert('hi');
});

Другое решение - установить курсор элемента в указатель и работать с событием jQuery live и click. Установите его в CSS.

Ответ 5

Также на основе Marek answer, который адаптирует событие к устройству для запуска функции, вот код, который заставляет запускать клик на устройствах iOS, где сначала происходит событие touchstart:

var UA = navigator.userAgent,
iOS = !!(UA.match(/iPad|iPhone/i));

if (iOS) {
   $(document).on('touchstart', function (e) {
       e.target.click();
   });
}