我的假设是,如果我禁用了一个div,所有的内容也都禁用了。
然而,内容是灰色的,但我仍然可以与它互动。
有办法做到吗?(禁用一个div,让所有的内容也禁用)
我的假设是,如果我禁用了一个div,所有的内容也都禁用了。
然而,内容是灰色的,但我仍然可以与它互动。
有办法做到吗?(禁用一个div,让所有的内容也禁用)
当前回答
这是给搜索者的,
我做得最好的是,
$('#myDiv *').attr("disabled", true);
$('#myDiv *').fadeTo('slow', .6);
其他回答
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");
}
实现这一点的一种方法是将disabled道具添加到div的所有子元素中。你可以很容易地实现这一点:
$("#myDiv").find("*").prop('disabled', true);
$("#myDiv")找到div, .find("*")得到所有级别的所有子节点,.prop('disabled', true)禁用每个子节点。
这样所有的内容都是禁用的,你不能点击它们,标签到它们,滚动它们,等等。此外,您不需要添加任何css类。
这个css仅/noscript解决方案在fieldset(或div或任何其他元素)上添加了一个覆盖层,防止交互:
fieldset { position: relative; }
fieldset[disabled]::after { content: ''; display: inline-block; position: absolute; top: 0; left: 0; right: 0; bottom: 0; pointer-events: all; background: rgba(128,128,128,0.2); }
如果你想要一个不可见的,即透明的覆盖,将背景设置为rgba(128,128,128,0),因为没有背景它将不起作用。 以上操作适用于IE9+。下面这个简单得多的css可以在IE11+上运行
[disabled] { pointer-events: none; }
铬
这里有一个快速的评论给那些不需要div而只需要blockelement的人。在HTML5中<fieldset disabled="disabled"></fieldset>得到了disabled属性。禁用字段集中的每个表单元素都是禁用的。
在jQuery中,另一种方法是获得包含DIV的内部高度、内部宽度和位置,然后简单地覆盖另一个DIV,透明的,在相同大小的上面。这将适用于容器内的所有元素,而不仅仅是输入。
记住,尽管禁用了JS,你仍然可以使用DIVs的输入/内容。上面的答案也一样。