4

私が達成しようとしていることは、Chrome で完全に動作します -- Android 4.1 しかし、iOS ではかなり失敗します。

$(document).on('mouseenter touchend','[id*=mmlink]', function (e) {
    var $btn = $(this);
    var href = $btn.attr('href');
    var count = ($btn.data('click_count') || 0) + 1;

    $btn.data('click_count', count);
    if (count == 1) {  
        $btn.click(function(v) { 
            v.preventDefault();
        });
     } else {
        document.location.href = href;
     }
 });

milonic menu を使ってサブメニューを生成しています。.on()サブメニューを選択するために使用する必要があります。

テストページ: http://www.wolfbariatrics.com/mmtest/index.htm

iOSでのみ発生する別のイベントがあると思います。Safari 用のリモート デバッガーを使用すると、ブレークポイントを設定できますが、ステップ インまたはステップ オーバーするとすぐに、アンカー タグに従います。

アンカー タグと href からすべてのイベントを完全に削除しましたが、まだ何も機能しません。

4

1 に答える 1

3

event.preventDefault について StackOverflow でこのトピックを確認し、false を返すことをお勧めします。

event.preventDefault() と return false

基本的に:「jQuery の preventDefault は、他のハンドラーの実行を妨げません。それが stopImmediatePropagation の目的です。」

「jQuery イベント ハンドラー内から false を返すことは、渡された jQuery.Event オブジェクトで e.preventDefault と e.stopPropagation の両方を呼び出すことと事実上同じです。

e.preventDefault() はデフォルト イベントの発生を防ぎます。e.stopPropagation() はイベントの発生を防ぎ、false を返すことで両方を行います。この動作は通常の (jQuery 以外の) イベント ハンドラーとは異なることに注意してください。特に、false を返してもイベントのバブルアップは停止しません。"

于 2012-10-02T19:23:32.843 に答える