Как использовать jQuery для события click в веб-приложении iPhone

Когда я использую jQuery для простого события click, он работает только для ссылок. Есть ли способ заставить его работать на промежутки и т.д.:

$("span.clicked").live("click", function(e){alert("span clicked!")});

$("a.clicked").live("click", function(e){alert("link clicked!")});

SPAN работает в Safari, но не в Mobile Safari (на iPhone или iPad), тогда как тег A работает в обоих.

Ответ 1

Вам нужно прослушать события "touchstart" и "touchhend". Добавьте слушателей с помощью jQuery...

$('span').bind( "touchstart", function(e){alert('Span Clicked!')} );

Возможно, вы захотите прослушать сенсорный старт и коснуться, чтобы вы могли убедиться, что элемент, который был нацелен при касании пальца, такой же, как и элемент, который был удален при удалении пальца.

Я уверен, что, возможно, есть лучший способ сделать это, но это должно работать:)

Изменить: есть лучший способ! См. fooobar.com/questions/63854/...

Ответ 2

Я тоже боролся с этим. После множества игр и попыток выяснить проблему, я столкнулся с простым решением.

Если вы установите элемент cursor на pointer, он волшебным образом снова работает с Jquery live и событием click. Это можно просто установить глобально в CSS.

Ответ 3

Фактически вам не нужно использовать событие touchstart или touchhend, если тег span (или что-то другое, кроме тега 'a) имеет свойство css:

cursor:pointer

клик зарегистрируется

Ответ 4

Вы также можете уговорить браузер генерировать события щелчка, добавив пустой атрибут onclick. Для подхода с поясом и привязкой в ​​случае, если любой подход перестанет работать в любом данном обновлении iOS, вы можете использовать что-то вроде этого:

$("span.clicked").live("click", function(e){alert("span clicked!")})
                 .attr('onclick','')
                 .css('cursor','pointer');

(при условии, что у вас нет реальных атрибутов onclick, которые вы не против уничтожения)

Ответ 5

Я пробовал все, и ни один из трюков не работал. Оказалось, что я не смог получить события кликов, потому что у меня был элемент видео под моим img. видео элементы, по-видимому, едят события щелчка.

Ответ 6

Вы можете добавить пустой атрибут onclick, например:

<span onclick=''>Touch or Click Me</span>
jQuery('span').live('click', function() { alert('foo'); });