0

MrMaksimize と Alex Blacksによる Google FastButtonの実装を使用すると、iOS で 2 回のクリックが発生します。

このフィドルを試してください: http://jsfiddle.net/Cotten/zQsVZ/

var a = new FastButton(document.getElementById('a'), function() {
 alert('click');
});

<div id="a">First click me</div>
<div id="b">Then, click here and nothing should happen... but it does :(</div>
  • 結果ペインを拡大する
  • 緑のボタンをクリックすると、アラートが表示されます
  • [OK] を押してください。すべて問題ないようです
  • 次に、FastButton(..) がない赤または青の div をクリックします。
  • アラートが再び発生します:(

iOS 5.1 を搭載した iPhone 4S iOS 6 および iPad 3 で、この間違った動作が発生します。

アンドロイドでは動作するようです。

jquery.tappable.jsで同じ奇妙な動作が発生します。

ありがとう!

4

2 に答える 2

0

FastButtonの実装により、Ghostclick(数ミリ秒のタイムアウト)がすでに防止されていると思います。

私は同じ問題を抱えていました。問題は、あなたが使用していて警告しているという事実にあるのではないかと思います(私がそうであったように)。何らかの理由で(私はコードを深く掘り下げていません)、アラートのために別のイベントが発生します。コードを試すだけの場合は、アラートの代わりに非ブロッキングの「console.log」を使用すると、この2番目のイベントが呼び出されない場合があります。

うまくいけば、alertコマンドを使用しないという考えですが、使用する場合は、タイムアウトを使用して使用します。これにより、ghostclickの実装が回避されます。これは、とにかく動作を壊していると思います。

new FastButton(document.getElementById('a'), function() { 
       setTimeout('alert("hello");',500);
});

それが役に立てば幸い。

乾杯、ミゲル

于 2013-03-20T21:46:03.783 に答える
0

私はここで同様の問題を抱えています。

このソリューションを使用して修正できました:

var clickObject = {
    flag: false,
    isAlreadyClicked: function () {
        var wasClicked = clickObject.flag;
        clickObject.flag = true;
        setTimeout(function () { clickObject.flag = false; }, 100);
        return wasClicked;
    }
};
var a = new FastButton(document.getElementById('a'), function() {
    if (!clickObject.isAlreadyClicked()) {
        alert('click');
    } else {
        return;
    }
});

高速ボタンの実装で機能するかどうかはわかりませんが、試してみる価値はあります. 私の実装は次のようになります。

$('#container').on('click touchstart', 'a.element', function(event) {
    if (!clickObject.isAlreadyClicked()) {
        alert('click');
    } else {
        return;
    }
});

頑張ってください!

于 2013-02-05T00:25:38.363 に答える