禁用div中的所有表单元素


161

有没有办法通过仅告诉jquery / javascript中的父div名称来禁用表单中的所有字段(textarea / textfield / option / input / checkbox / submit等)?


4
请注意,这样做会导致提交表单时这些元素的值“消失”-为了保留值,请使它们成为readOnly,而不是禁用。
暗影巫师为您耳边


1
一个Idea可以在允许/阻止单击的控件之前隐藏/显示div,以及使用CSS禁用样式的控件。
贾德

Answers:


261

尝试使用:input选择器以及父选择器:

$("#parent-selector :input").attr("disabled", true);

我可以使用它来将div中的所有输入都设置为0吗?
jackson5年

2
我也想禁用<a> ...我的<a>也具有onclick
RAJ 2012年

7
引用jQuery因为:input是jQuery扩展,而不是CSS规范的一部分,所以使用:input的查询不能利用本机DOM querySelectorAll()方法提供的性能提升。为了在使用:input选择元素时达到最佳性能,请首先使用纯CSS选择器选择元素,然后使用.filter(“:input”)。
acme 2012年

2
@acme:同意100%,但该问题并未暗示我可以过滤的选择器。我得到的唯一信息是,用户必须能够使用div名称来完成操作,仅此而已。如果提供更多信息,我本可以想出一个更有效的解决方案。
Andrew Whitaker 2012年

1
使用.prop()代替.attr()(在jquery 1.6之上)
Akshay Gundewar,2016年

154
$('#mydiv').find('input, textarea, button, select').attr('disabled','disabled');

4
它应该是(“输入,文本区域,按钮”)所有选择器都应用一组引号引起来。api.jquery.com/multiple-selector以您发送多个参数的方式进行操作。
伊万·伊凡尼奇(IvanIvanić)2011年

2
这只会找到您的输入,而忽略文本区域和按钮。:input选择器是一种解决方法,但是如果您想明确列出它们,则需要使用$('#mydiv').find('input, textarea, button')
Mark Hildreth

1
...或者只是$('#your-form')。children()。prop('disabled',true);
2014年

@walv 当所有表单元素都是表单的单个后代时才有效。Find()查找列表中的所有元素,无论其后代级别如何。除了对于新的jquery版本使用prop而不是attr之外,此代码行是正确的。
克里斯·奥

32

对于jquery 1.6+,请使用.prop()代替.attr()

$("#parent-selector :input").prop("disabled", true);

要么

$("#parent-selector :input").attr("disabled", "disabled");

2
您是对的,但有些时候支持工作,有些时候不工作,特别是由于复选框和单选按钮的原因
damon

我意识到这是一个旧线程,但是使用打字稿时会出现一些错误
Simon Price

5
    $(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);
        }
    }


2

如何仅使用“禁用” HTML属性来实现此目的

<form>
 <fieldset disabled>
  <div class="row">
   <input type="text" placeholder="">
   <textarea></textarea>
   <select></select>
  </div>
  <div class="pull-right">
    <button class="button-primary btn-sm" type="submit">Submit</button>
  </div>
 </fieldset>
</form>

只需通过在字段集中设置“禁用”,即可禁用该字段集中的所有字段。

$('fieldset').attr('disabled', 'disabled');

1

我在各个地方都使用下面的函数。只要使用了正确的选择器,就可以在div或表中的按钮元素中使用。只是“:button”不会对我重新启用。

function ToggleMenuButtons(bActivate) {
    if (bActivate == true) {
        $("#SelectorId :input[type='button']").prop("disabled", true);
    } else {
        $("#SelectorId :input[type='button']").removeProp("disabled");
    }
}

二合一解决方案很棒。
3条规则

0

以下操作将禁用所有输入,但不能将其输入btn类,并且还会添加类以覆盖禁用CSS。

$('#EditForm :input').not('.btn').attr("disabled", true).addClass('disabledClass');

CSS类

.disabledClass{
  background-color: rgb(235, 235, 228) !important;
}

0

对我来说,可以接受的答案不起作用,因为我有一些ASP网络隐藏字段也被禁用了,所以我只选择禁用可见字段

//just to save the list so we can enable fields later
var list = [];
$('#parent-selector').find(':input:visible:not([readonly][disabled]),button').each(function () {
    list.push('#' + this.id);
});

$(list.join(',')).attr('readonly', true);

0

使用CSS类防止编辑Div元素

CSS:

.divoverlay
{
position:absolute;
width:100%;
height:100%;
background-color:transparent;
z-index:1;
top:0;
}

JS:

$('#divName').append('<div class=divoverlay></div>');

或在HTML标记中添加类名称。这将阻止编辑Div元素。


0

仅文字类型

$(".form-edit-account :input[type=text]").attr("disabled", "disabled");

仅密码类型

$(".form-edit-account :input[type=password]").attr("disabled", "disabled");

仅限电子邮件类型

$(".form-edit-account :input[type=email]").attr("disabled", "disabled");
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.