現在、ページがポストバックされているか、何か他のことが起こっているとき、ユーザーが同じボタンを複数回クリックできないように、ページ全体の上部に大きな灰色の 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/