在Javascript中启用和禁用Div及其元素

Ema*_*max 65 javascript xhtml jquery

我在寻找一种方法来启用和禁用DIV ID ="dcalc"和它的孩子.

<div id="dcalc" class="nerkheArz"
 style="left: 50px; top: 150px; width: 380px; height: 370px;
 background: #CDF; text-align: center" >
 <div class="nerkh-Arz"></div>
 <div id="calc"> </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我想在加载页面时禁用它们然后通过单击我可以启用它们吗?

这就是我尝试过的

document.getElementById("dcalc").disabled = true;
Run Code Online (Sandbox Code Playgroud)

Rio*_*ams 148

您应该能够通过jQuery中的attr()prop()函数设置它们,如下所示:

jQuery(<1.7):

// This will disable just the div
$("#dcacl").attr('disabled','disabled');
Run Code Online (Sandbox Code Playgroud)

要么

// This will disable everything contained in the div
$("#dcacl").children().attr("disabled","disabled");
Run Code Online (Sandbox Code Playgroud)

jQuery(> = 1.7):

// This will disable just the div
$("#dcacl").prop('disabled',true);
Run Code Online (Sandbox Code Playgroud)

要么

// This will disable everything contained in the div
$("#dcacl").children().prop('disabled',true);
Run Code Online (Sandbox Code Playgroud)

要么

//  disable ALL descendants of the DIV
$("#dcacl *").prop('disabled',true);
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

// This will disable just the div
document.getElementById("dcalc").disabled = true;
Run Code Online (Sandbox Code Playgroud)

要么

// This will disable all the children of the div
var nodes = document.getElementById("dcalc").getElementsByTagName('*');
for(var i = 0; i < nodes.length; i++){
     nodes[i].disabled = true;
}
Run Code Online (Sandbox Code Playgroud)

  • 它不起作用.我仍然可以点击子链接. (12认同)
  • 我也是,它不起作用.我仍然可以点击子链接 (6认同)
  • 注意`$ el.children()`只遍历DOM的单个级别,因此它实际上不会禁用DIV的所有后代.所以,@ Emerald214 @ oliver-pons,要做到这一点,你必须做一些像`$("#dcac1*").prop("disabled",true);`否则,很好的回答. (6认同)
  • `.prop('禁用',真)`会更好.而你的最后一个代码块泄漏了一个全局(你需要`var i`). (4认同)

小智 50

如果你想要禁用所有div的控件,你可以尝试在div上添加透明div来禁用,你将使它无法点击,也可以使用fadeTo来创建禁用外观.

试试这个.

$('#DisableDiv').fadeTo('slow',.6);
$('#DisableDiv').append('<div style="position: absolute;top:0;left:0;width: 100%;height:100%;z-index:2;opacity:0.4;filter: alpha(opacity = 50)"></div>');
Run Code Online (Sandbox Code Playgroud)

  • 将它与抑制键盘和复制/粘贴事件结合起来:`var stopPropFn = function(e){e.stopPropagation(); e.preventDefault(); }; $('#DisableDiv').bind("keydown",stopPropFn); $('#DisableDiv').bind("keypress",stopPropFn); $('#DisableDiv').bind("paste",stopPropFn);` (3认同)
  • 您应该为屏蔽部门提供一个 ID,以便在您想要重新启用该部门时将其删除 (2认同)

nnn*_*nnn 19

以下选择所有后代元素并禁用它们:

$("#dcacl").find("*").prop("disabled", true);
Run Code Online (Sandbox Code Playgroud)

但是,禁用某些元素类型才有意义:输入,按钮等,因此您需要更具体的选择器:

$("#dcac1").find(":input").prop("disabled",true);
// noting that ":input" gives you the equivalent of
$("#dcac1").find("input,select,textarea,button").prop("disabled",true);
Run Code Online (Sandbox Code Playgroud)

要重新启用,只需将"disabled"设置为false即可.

我想在加载页面时禁用它们,然后通过单击我可以启用它们

好的,所以将上面的代码放在文档就绪处理程序中,并设置一个合适的点击处理程序:

$(document).ready(function() {
    var $dcac1kids = $("#dcac1").find(":input");
    $dcac1kids.prop("disabled",true);

    // not sure what you want to click on to re-enable
    $("selector for whatever you want to click").one("click",function() {
       $dcac1kids.prop("disabled",false);
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经缓存了选择器的结果,假设你没有在页面加载和点击之间向div添加更多元素.并且我已经附加了单击处理程序,.one()因为您没有指定重新禁用元素的要求,因此可能只需要处理一次事件.当然.one(),.click()如果合适,您可以更改为.