-1

現在、ページがポストバックされているか、何か他のことが起こっているとき、ユーザーが同じボタンを複数回クリックできないように、ページ全体の上部に大きな灰色の div を表示します。これは 99% の確率で正常に機能し、残りの 1% は、ユーザーが div からスクロール/ズームできる特定のモバイル デバイス上にあります。

CSS が正しく機能するように完璧にしようとする代わりに (これは新しいデバイスとの継続的な戦いになるでしょう)、ユーザーが何もクリックできないようにすることにしました。たとえば$('a').click(function(e){e.preventDefault();});、ユーザーがアンカー タグをクリックしてリンクに移動するのを阻止できますが、リンク内の onclick イベントの発生は阻止できません。

最終的にページを元の状態に戻す必要があるため、ページを根本的に変更しすぎないようにしたいと考えています (すべての onclick 属性を削除するなど)。onclick イベントが実行される前にクリックを傍受したいのですが、これは可能だとは思いません。代わりに、クリックした要素をマウスダウンで非表示にし、ドキュメントのマウスアップで表示します。これにより、クリックイベントの発生が停止しますが、見栄えがよくありません。誰でもより良い解決策を考えることができますか? そうでない場合、これはすべてのデバイス/ブラウザで機能しますか?

var catchClickHandler = function(){
    var $this = $(this);
    $this.attr('data-orig-display', $this.css('display'));
    $this.css({display:'none'});
};
var resetClickedElems = function(){
    $('[data-orig-display]').each(function(){
        $(this).css({display:$(this).attr('data-orig-display')}).removeAttr('data-orig-display');
    });
};

$('#btn').click(function(){
    $('a,input').on('mousedown',catchClickHandler);
    $(document).on('mouseup', resetClickedElems);
    setTimeout(function(){
        $('a,input').off('mousedown',catchClickHandler);
        $(document).off('mouseup', resetClickedElems);
    }, 5000);
});

JSFiddle: http://jsfiddle.net/d4wzK/2/

4

3 に答える 3

1

jQuery BlockUI Plugin http://www.malsup.com/jquery/block/を使用できます

于 2013-05-15T14:27:17.107 に答える
1

アンカー タグのすべてのアクションを防止するには、次のようにします。

jQuery('#btn').click(function(){
    jQuery('a').each(function() {
        jQuery(this).attr('stopClick', jQuery(this).attr('onclick'))
            .removeAttr('onclick')
            .click(function(e) {
                e.preventDefault();
            });
    });
});

これにより、後で元に戻す必要がある場合に onclick の名前が stopclick に変更され、href に従うデフォルトの動作も停止します。

于 2013-05-15T14:31:58.377 に答える
0
document.addListener('click',function(e){e.preventDefault()})

変更-

タスクを完了した後、ドキュメントからクリック イベントを削除するのはあなたの義務です。

例 -

function prevent(e){
    e.preventDefault()
}
//add 
document.addListener('click',prevent)

//remove
document.removeListener('click',prevent)
于 2013-05-15T14:32:14.903 に答える