我原以为如果禁用一个div,所有内容也会被禁用。
然而,内容变灰了,但我仍然可以与它交互。
有没有办法做到这一点?(禁用div并使所有内容也被禁用)
我原以为如果禁用一个div,所有内容也会被禁用。
然而,内容变灰了,但我仍然可以与它交互。
有没有办法做到这一点?(禁用div并使所有内容也被禁用)
正如许多答案已经澄清的那样,disabled
不是一个DIV
属性。然而xHTML代表可扩展HTML。这意味着您可以定义自己的HTML属性(所有前端框架也都这样做)。并且CSS支持属性选择器,即[]
。
请使用带有您定义的属性的标准HTML:
<div disabled>My disabled div</div>
使用 CSS:
div[disabled] {
opacity: 0.6;
pointer-events: none;
}
注意:您也可以使用CSS属性选择器与ID或类名一起使用,例如.myDiv[disabled] {...}
还可以应用值筛选器,例如:以下HTML禁用具有值div[disabled=disabled] {...}
的标准属性。
<div/>
元素的内容CSS 属性 pointer-events
无法单独禁用子元素的滚动,并且在 IE10 及其以下版本中不支持 <div/>
元素(仅支持 SVG)。
http://caniuse.com/#feat=pointer-events
要在所有浏览器中禁用 <div/>
元素的内容。
JQuery:
$("#myDiv")
.addClass("disable")
.click(function () {
return false;
});
.disable {
opacity: 0.4;
}
/* Disable scrolling on child elements */
.disable div,
.disable textarea {
overflow: hidden;
}
禁用除IE10及以下版本之外的所有浏览器上的
Jquery:
$("#myDiv").addClass("disable");
CSS:
.disable {
/* Note: pointer-events not supported by IE10 and under */
pointer-events: none;
opacity: 0.4;
}
/* Disable scrolling on child elements */
.disable div,
.disable textarea {
overflow: hidden;
}
测试的浏览器: IE 9、Chrome、Firefox 和 jquery-1.7.1.min.js
$(document).ready(function () {
$('#chkDisableEnableElements').change(function () {
if ($('#chkDisableEnableElements').is(':checked')) {
enableElements($('#divDifferentElements').children());
}
else {
disableElements($('#divDifferentElements').children());
}
});
});
function disableElements(el) {
for (var i = 0; i < el.length; i++) {
el[i].disabled = true;
disableElements(el[i].children);
}
}
function enableElements(el) {
for (var i = 0; i < el.length; i++) {
el[i].disabled = false;
enableElements(el[i].children);
}
}
如您所知,HTML输入控件可以使用“disabled”属性禁用。一旦设置了输入控件的“disabled”属性,与该控件关联的事件处理程序将不会被调用。
如果您希望为不支持“disabled”属性的HTML元素(如div)模拟上述行为,则需要执行以下操作:
1)当您想要禁用div时,像往常一样设置其禁用属性(只是为了遵守约定)
2)在您的div的单击和/或键处理程序中,检查div上是否设置了禁用属性。如果设置了禁用属性,则忽略单击或键事件(例如立即返回)。如果未设置禁用属性,则执行div的单击和/或键事件逻辑。
以上步骤也适用于所有浏览器。
如评论中所述,您仍然可以使用Tab键在元素之间导航以访问元素。因此,我建议这样做:
$("#mydiv")
.css({"pointer-events" : "none" , "opacity" : "0.4"})
.attr("tabindex" , "-1");
这是给搜索者的,
我做的最好的事情是,
$('#myDiv *').attr("disabled", true);
$('#myDiv *').fadeTo('slow', .6);
或者使用 CSS 和 "disabled" 类。
注意:不要使用 disabled 属性。
无需在 jQuery on/off 上搞乱。
这种方法更加简单,并且跨浏览器兼容。
.disabled{
position: relative;
}
.disabled:after{
content: "";
position: absolute;
width: 100%;
height: inherit;
background-color: rgba(0,0,0,0.1);
top: 0;
left: 0;
right: 0;
bottom: 0;
}
然后您可以在初始化页面或切换按钮时打开和关闭它
if(myDiv !== "can be edited"){
$('div').removeClass('disabled');
} else{
$('div').addClass('disabled');
}
我想提供一些注释。
function disableItems(divSelector){
var disableInputs = $(divSelector).find(":input").not("[disabled]");
disableInputs.attr("data-reenable", true);
disableInputs.attr("disabled", true);
}
function reEnableItems(divSelector){
var reenableInputs = $(divSelector).find("[data-reenable]");
reenableInputs.removeAttr("disabled");
reenableInputs.removeAttr("data-reenable");
}
以下是一种更全面的解决方案,用于启用divs遮罩
还包括hourglassOn和hourglassOff,可以分别使用
// elemOrId - jquery element or element id, defaults to $('<body>')'
// settings.color defaults to 'transparent'
// settings.opacity defaults to 1
// settings.zIndex defaults to 2147483647
// if settings.hourglasss==true change cursor to hourglass over mask
function maskOn(elemOrId, settings) {
var elem=elemFromParam(elemOrId);
if (!elem) return;
var maskDiv=elem.data('maskDiv');
if (!maskDiv) {
maskDiv=$('<div style="position:fixed;display:inline"></div>');
$('body').append(maskDiv);
elem.data('maskDiv', maskDiv);
}
if (typeof settings==='undefined' || settings===null) settings={};
if (typeof settings.color==='undefined' || settings.color===null) settings.color='transparent';
if (typeof settings.opacity==='undefined' || settings.opacity===null) settings.opacity=1;
if (typeof settings.zIndex==='undefined' || settings.zIndex===null) settings.zIndex=2147483647;
if (typeof settings.hourglass==='undefined' || settings.hourglass===null) settings.hourglass=false;
// stretch maskdiv over elem
var offsetParent = elem.offsetParent();
var widthPercents=elem.outerWidth()*100/offsetParent.outerWidth()+'%';
var heightPercents=elem.outerHeight()*100/offsetParent.outerHeight()+'%';
maskDiv.width(widthPercents);
maskDiv.height(heightPercents);
maskDiv.offset($(elem).offset());
// set styles
maskDiv[0].style.backgroundColor = settings.color;
maskDiv[0].style.opacity = settings.opacity;
maskDiv[0].style.zIndex = settings.zIndex;
if (settings.hourglass) hourglassOn(maskDiv);
return maskDiv;
}
// elemOrId - jquery element or element id, defaults to $('<body>')'
function maskOff(elemOrId) {
var elem=elemFromParam(elemOrId);
if (!elem) return;
var maskDiv=elem.data('maskDiv');
if (!maskDiv) {
console.log('maskOff no mask !');
return;
}
elem.removeData('maskDiv');
maskDiv.remove();
}
// elemOrId - jquery element or element id, defaults to $('<body>')'
// if decendents is true also shows hourglass over decendents of elemOrId, defaults to true
function hourglassOn(elemOrId, decendents) {
var elem=elemFromParam(elemOrId);
if (!elem) return;
if (typeof decendents==='undefined' || decendents===null) decendents=true;
if ($('style:contains("hourGlass")').length < 1) $('<style>').text('.hourGlass { cursor: wait !important; }').appendTo('head');
if ($('style:contains("hourGlassWithDecendents")').length < 1) $('<style>').text('.hourGlassWithDecendents, .hourGlassWithDecendents * { cursor: wait !important; }').appendTo('head');
elem.addClass(decendents ? 'hourGlassWithDecendents' : 'hourGlass');
}
// elemOrId - jquery element or element id, defaults to $('<body>')'
function hourglassOff(elemOrId) {
var elem=elemFromParam(elemOrId);
if (!elem) return;
elem.removeClass('hourGlass');
elem.removeClass('hourGlassWithDecendents');
}
function elemFromParam(elemOrId) {
var elem;
if (typeof elemOrId==='undefined' || elemOrId===null)
elem=$('body');
else if (typeof elemOrId === 'string' || elemOrId instanceof String)
elem=$('#'+elemOrId);
else
elem=$(elemOrId);
if (!elem || elem.length===0) {
console.log('elemFromParam no element !');
return null;
}
return elem;
}
maskOn(); // transparent page mask
maskOn(null, {color:'gray', opacity:0.8}); // gray page mask with opacity
maskOff(); // remove page mask
maskOn(div); // transparent div mask
maskOn(divId, {color:'gray', hourglass:true}); // gray div mask with hourglass
maskOff(div); // remove div mask
查看 jsfiddle