好吧,在考虑了所有选项之后,对于所有这些活动的喧嚣,它看起来仍然不方便。由于它还必须单独绑定每个事件的处理程序,因此脚本也会影响性能。
我将坚持使用更简单的解决方案,只需在顶部放置一个带有透明 bg 的 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');
更新的小提琴也可以防止标签。
编辑2
或者,我们可以扩展 jQuery 以在任何元素上使用我们的自定义lock()
和函数。unlock()
见最后一个小提琴: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 )