Вопрос по jquery, jquery-mobile – Как отключить поведение Anchor по умолчанию в jQuery Mobile (iOS)

11

Я создаю приложение для iPhone и iPad, используя PhoneGap и JQM

<div class="ui-block-a">
   <a id="btnLink" href="#pageID" data-role="button"></a>
</div>

и он работает нормально, но когда я запускаю его на устройстве (не пробовал симулятор) и долго нажимаю, я получаю меню iPhone по умолчанию для ссылки в обычном браузере, чтобы открыть или скопировать ссылку.

Как я могу отключить эту функцию по умолчанию в моем приложении?

Я попробовал это без успеха:

$("a").click(function(event) {
  event.preventDefault(); // long press menu still apear
});


$("a").bind('click',function(event) {
console.log(['preventingclick',event.type]);
event.preventDefault(); // long press menu still apear
});

если я свяжусь с 'taphold' Я все еще вижу меню при длительном нажатии, но после нажатия кнопки «Отмена» я вижу журнал консоли: [& quot; предотвращение длительного нажатия & quot;, & quot; taphold & quot;]

$("a").bind('taphold', function(event) {
console.log(['preventing long press',event.type]);
event.preventDefault(); // long press menu still apear
});

если я использую делегат на «тапхолд»; событие как это:

$("a").delegate('taphold', function(event) {
console.log(['preventing long press',event.type]);
event.preventDefault();
});

устранит проблему, но я больше не могу прикреплять какие-либо события, поэтому ни одна из моих кнопок не будет работать после этого.

$('#btnLink').bind("click", function() {
$.mobile.changePage('mypage', 'slide'); // won't fire any more because of the delegate before
});

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

заранее спасибо

Anchor long press menu on iPhone

Ваш Ответ

5   ответов
3

и касания webkit:

document.getElementById('your element id').style.webkitTouchCallout = 'none';
2
<style type="text/css">
 *:not(input):not(textarea) {
 -webkit-user-select: none; /* disable selection/Copy of UIWebView */
 -webkit-touch-callout: none; /* disable the IOS popup when long-press on a link */
}       
</style>

**If you want Disable only anchor button tag use this.**
 a {-webkit-user-select: none; /* disable selection/Copy of UIWebView */
  -webkit-touch-callout: none; /* disable the IOS popup when long-press on a link */
 }
11

Мне пришлось объединить исправления кода, CSS и JavaScript

поэтому в моем CSS я сделал это:

body { -webkit-touch-callout: none !important; }
a { -webkit-user-select: none !important; }

в моем JavaScript сделал это:

function onBodyLoad() {
  $("a").bind('taphold', function(event) {
  event.preventDefault();
 });
}

и теперь все ссылки отключены, но если я прикреплю событие к любому из них, оно будет работать без проблем

Спасибо всем

Error: User Rate Limit ExceededtapholdError: User Rate Limit Exceeded
7

вы только обрабатываете "click". событие. Здесь это другое событие и фактически системное событие для iOS, которое вы не можете обработать в javascript.

Поэтому вам придется полностью отключить эту функцию в своем веб-приложении, если вы этого не хотите.

Попробуйте следующее:

<script>
document.documentElement.style.webkitTouchCallout = 'none';
</script>

Или в вашем CSS:

a[data-role=button] {
    -webkit-user-select: none!important;
}
Error: User Rate Limit Exceeded EMMNS
Error: User Rate Limit Exceeded
11

http://jquerymobile.com/demos/1.1.0/docs/api/events.html, Вы хотите обработать & quot; taphold & quot; событие.

EDIT Вскоре после публикации я обнаружил ту же проблему в своем приложении! Я обнаружил, что добавление этого стиля, аналогично тому, что предлагал @chrisben, исправляет его:

body {
    -webkit-touch-callout: none !important;
}

У меня нет никаких элементов формы в моем приложении, поэтому я не знаю о них, но ссылки и кнопки все прекрасно работают с этим добавленным стилем.

Error: User Rate Limit Exceeded EMMNS
Error: User Rate Limit Exceeded EMMNS

Похожие вопросы