すべてのオプションを検討した後でも、このイベントの喧騒にはまだ便利ではないようです。また、各イベントのハンドラーを個別にバインドする必要があるため、スクリプトもパフォーマンスに影響します。
要素をカバーするために透明な背景を持つ div を上に置くだけで、はるかに単純なソリューションに固執するつもりです。
$('form').css('position','relative').prepend($('<div class="mask" style="position:absolute;z-index:9000;height:100%;width:100%;background-image:url(1px_transparent.png);"></div>'));
これは要素の全領域を自動的に塗りつぶします。代わりに、半透明の画像を使用して、これがロックされた要素であることをユーザーが理解できるようにし、混乱を招かないようにすることもできます。
ロックを解除するには、要素から .mask div を削除するだけです。
編集
新しいフィドル: http://jsfiddle.net/YAdXk/8/
実際には、tabindex
属性をに設定することでタブ移動を無効にすることができます-1
.find('input,textarea,select').attr('tabindex','-1');
更新されたフィドルにより、タブ移動も防止されます。
EDIT2
lock()
または、任意の要素でカスタムとunlock()
関数を使用するように jQuery を拡張できます。
最後のフィドルを参照してください: http://jsfiddle.net/YAdXk/13/
(function($) {
$.fn.lock= function() {
return this.each(function() {
$(this).css('position','relative').prepend($('<div class="mask" style="position:absolute;z-index:9000;height:100%;width:100%;background-image:url('+transparent_picture+');"></div>')).find('input,textarea,select').attr('tabindex','-1');
});
};
$.fn.unlock= function() {
return this.each(function() {
$(this).find('*').removeAttr('tabindex').filter('.mask').remove();
});
};
})( jQuery )