2

JavaScript の確認ダイアログが表示されますが、[キャンセル] をタップすると、ダイアログが閉じた後、画面の任意の場所をタップすると、ダイアログが再度表示されます。余分な 1 回だけ発生し、ダイアログがポップアップせずにページをもう一度タップできます。

これは、iOS 5.0.1 を実行している iPhone/iPad でのみ表示されます。私は iOS 6 デバイスを持っていないので、そこで起こっているかどうかはわかりません。

私が使用しているコードは次のとおりです。

$(bpm.remoteAppDivName).on('tap', 'a.delete-pending-payment', function(event) { 

    if  (isJQMGhostClick(event)) { return false; }

    var deleteGlobalPaymentURL = $(this).attr('href');

    var confirmMsg = confirm ("Are you sure you want to do that?"); 

    if (confirmMsg === true){

        window.location = '/index.htm';

    }
    event.preventDefault();
    return false;

});

var lastclickpoint, curclickpoint;
var isJQMGhostClick = function(event){
    curclickpoint = event.clientX+'x'+event.clientY;
    var ret=false; 
    if (lastclickpoint === curclickpoint) {
        ret=true;
    } else {
        ret=false;
    }
    lastclickpoint = curclickpoint;
    return ret;
}

問題ページへのリンクは次のとおりです: http://www.5280skateparks.com/dev/confirmBug.htm

どんな助けでも大歓迎です。

更新: iOS 6.0.1 でも発生していることを確認しました。

4

1 に答える 1

0

これは、ここここで詳細に説明されているjQueryMobileの「ゴーストクリック」です。フォーラムページで、解決策が提案されました。これを以下に再現し、小さなバグを修正しました。

var lastclickpoint, curclickpoint;
var isJQMGhostClick = function(event){
    curclickpoint = event.clientX+'x'+event.clientY;
    var ret=false; 
    if (lastclickpoint === curclickpoint) {
      ret=true;
    } else {
      ret=false;
    }
      lastclickpoint = curclickpoint;
   return ret;
}

このコードを少し変更して、クリックのペアが常に期待されるとは限らないようにしました。この関数は、ゴーストクリックが0回でゴーストクリックが2回を超える場合に正しく機能するようになりました。isJQMGhostClick(event)タップハンドラーの先頭でチェックし、isJQMGhostClick関数がtrueを返した場合はイベントを無視することで、これを使用できます。

于 2013-02-02T00:23:19.957 に答える