11

PhoneGapとjQMを使用してiPhoneとiPad用のアプリを作成しています

<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'でバインドすると、長押ししてもメニューが表示されますが、キャンセルをクリックすると、コンソールログが表示されます:["長押しの防止"、 "taphold"]

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

次のように「taphold」イベントでデリゲートを使用する場合:

$("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
});

デリゲートが現在および将来のすべての要素に適用されることを私は知っていますが、私は答えに近づいていると思いますが、まだです。

前もって感謝します

iPhoneの長押しメニューを固定する

4

5 に答える 5

12

うまくいきました、

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();
 });
}

これですべてのリンクが無効になりますが、いずれかのリンクにイベントを添付すると問題なく機能します

皆さんありがとう

于 2012-05-23T16:59:47.960 に答える
11

ここhttp://jquerymobile.com/demos/1.1.0/docs/api/events.htmlでJQMによって発生したイベントを見てください。「taphold」イベントを処理する必要があります。

編集 これを投稿した直後に、私は私のアプリで同じ問題を見ることになりました!@chrisbenが提案したのと同様に、このスタイルを追加すると修正されることがわかりました。

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

アプリにフォーム要素がないので、それらについてはわかりませんが、リンクとボタンはすべて、このスタイルを追加すると完全に機能します。

于 2012-05-23T08:17:54.493 に答える
7

$('a')。click(..)を実行すると、'click'イベントのみが処理されます。これは別のイベントであり、実際にはJavaScriptでは処理できないiOSのシステムイベントです。

したがって、この機能が不要な場合は、Webアプリから完全に無効にする必要があります。

次のことを試してください。

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

またはCSSで:

a[data-role=button] {
    -webkit-user-select: none!important;
}
于 2012-05-23T07:52:32.030 に答える
3

これをiPhoneで機能させる最も簡単な方法は、Webkitのタッチスタイルを無効にすることです。

document.getElementById('your element id').style.webkitTouchCallout = 'none';
于 2012-07-17T16:33:03.913 に答える
3
<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 */
 }
于 2014-10-28T14:27:56.577 に答える