jQuery Mobile устанавливает задержку примерно в 300 мсек, прежде чем вызывается функция JavaScript для «нажатых» кнопок на сенсорных устройствах. Это решает проблему на сенсорных устройствах, когда, если нажатая кнопка изменяет содержимое, находящееся под ней (например, изменение страницы), тогда щелчок также может интерпретироваться для того содержимого, которое заменяет кнопку.
Когда пользователь отнимает палец с кнопки после нажатия на нее, сразу вызывается событие touchend
, за которым сразу следует vclick
, а затем событие tap
. Затем у вас есть 300 мс до вызова событий click
, mousedown
и mouseup
.
Поэтому, если вы выполните одно из следующих действий, вы получите задержку в 300 мс:
$('#myButton').bind('click', ...
$('#myButton').click( ...
<div id='myButton' onClick='changePage()' ...
Так что вместо этого вы должны привязать событие vclick
или tap
к кнопке следующим образом (я считаю, vclick
немного быстрее, чем tap
):
$('#myButton').bind('vclick', function(ev) {
ev.preventDefault();
//Your code
});
Вы также можете привязаться к событию touchend
, но это может привести к нежелательным эффектам, но попробуйте.
Документация jQuery Mobile говорит об этом ... (поэтому я советую тщательно проверить vclick
или tap
на вашем тестовом устройстве):
Мы рекомендуем использовать click вместо vclick в любое время, когда выполняется действие
Триггер имеет возможность изменения содержимого под
точка, которая была затронута на экране. Это включает в себя переходы страниц и
другие виды поведения, такие как коллапс / расширение, которые могут привести к
смещение экрана или полностью заменяемое содержимое.
Хорошая дискуссия по этому вопросу здесь: http://forum.jquery.com/topic/how-to-remove-the-300ms-delay-when-clicking-on-a-link-in-jquery-mobile#14737000003088725