如何使用jQuery禁用/启用选择字段?


177

我想以如下形式创建一个选项

[] I would like to order a [selectbox with pizza] pizza

其中,只有在选中复选框的情况下才启用选择框,而在未选中时禁用选择框。

我想出了这段代码:

<form>
<input type="checkbox" id="pizza" name="pizza" value="yes"> <label for="pizza">
I would like to order a</label>
<select name="pizza_kind">
    <option>(choose one)</option>
    <option value="margaritha">Margaritha</option>
    <option value="hawai">Hawai</option>
</select>
pizza.
</form>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">
</script>
<script>
var update_pizza = function () {
    if ($("#pizza").is(":checked")) {
        $("#pizza_kind").removeAttr("disabled");
    }
    else {
        $("#pizza_kind").prop('disabled', 'disabled');
    }
};

$(update_pizza);
$("#pizza").change(update_pizza);
</script>

我尝试了各种方法如何使用设置禁用属性.prop().attr().disabled=。但是,什么也没有发生。当应用于<input type="checkbox">而不是时<select>,代码可以完美运行。

如何<select>使用jQuery 禁用/启用?


您好,这种方法在IE 10上适用吗?不知道如何在IE 10中启用选择字段
。– ROROROOROROR

Answers:


299

您想使用如下代码:

<form>
  <input type="checkbox" id="pizza" name="pizza" value="yes">
  <label for="pizza">I would like to order a</label>
  <select id="pizza_kind" name="pizza_kind">
    <option>(choose one)</option>
    <option value="margaritha">Margaritha</option>
    <option value="hawai">Hawai</option>
  </select>
  pizza.
</form>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
  var update_pizza = function () {
    if ($("#pizza").is(":checked")) {
        $('#pizza_kind').prop('disabled', false);
    }
    else {
        $('#pizza_kind').prop('disabled', 'disabled');
    }
  };
  $(update_pizza);
  $("#pizza").change(update_pizza);
</script>

这里是工作的例子


33
$('#pizza_kind').prop('disabled', false);$('#pizza_kind').prop('disabled', true);。正如jQuery的文档所述属性通常会在不更改序列化HTML属性的情况下影响DOM元素的动态状态。示例包括输入元素的value属性,输入和按钮的Disabled属性或复选框的checked属性。应该使用.prop()方法而不是.attr()方法来设置禁用和检查状态。.val()方法应用于获取和设置值。
2013年

2
对于jQuery 3,应为“ $('#pizza_kind')。prop('disabled',true / false);” 据我所知
Gennady G

3
什么是$(update_pizza); 在干嘛 在jQuery对象中包装函数?
爱德华

120

为了能够禁用/启用选择,首先您需要选择一个ID或类别。然后,您可以执行以下操作:

禁用:

$('#id').attr('disabled', 'disabled');

启用:

$('#id').removeAttr('disabled');

7
“应该使用.prop()方法设置禁用和检查的功能,而不是.attr()方法”来源:api.jquery.com/prop
Colin

2
这应该是选择的答案..对于略读更好:)
魁北克

这不应该是答案.removeAttr()不再设置属性设置为false jquery.com/upgrade-guide/3.0/... stackoverflow.com/a/13626565/125981
马克Schultheiss

24

禁用是WHATWG声明的select元素布尔属性,这意味着用jQuery 禁用正确方法是。

jQuery("#selectId").attr('disabled',true);

这将使这个HTML

<select id="selectId" name="gender" disabled="disabled">
    <option value="-1">--Select a Gender--</option>
    <option value="0">Male</option>
    <option value="1">Female</option>
</select>

这适用于XHTML和HTML(W3School参考)

但是也可以将其用作属性来完成

jQuery("#selectId").prop('disabled', 'disabled');

得到

<select id="selectId" name="gender" disabled>

仅适用于HTML而不适用于XTML

注意:禁用的元素将不会与在此问题中回答的表单一起提交:禁用的表单元素未提交

注意2:禁用的元素可能显示为灰色。

注意3:

禁用的表单控件必须阻止在用户交互任务源上排队的任何单击事件在元素上分派。

TL; DR

<script>
    var update_pizza = function () {
        if ($("#pizza").is(":checked")) {
            $('#pizza_kind').attr('disabled', false);
        } else {
            $('#pizza_kind').attr('disabled', true);
        }
    };
    $(update_pizza);
    $("#pizza").change(update_pizza);
</script>

16

只需简单地使用:

var update_pizza = function () {
     $("#pizza_kind").prop("disabled", !$('#pizza').prop('checked'));
};

update_pizza();
$("#pizza").change(update_pizza);

DEMO


8

使用以下内容:

$("select").attr("disabled", "disabled");

或者只是添加id="pizza_kind"<select>标签,例如<select name="pizza_kind" id="pizza_kind">jsfiddle链接

您的代码不起作用的原因仅仅是因为$("#pizza_kind")没有选择<select>元素,因为它没有id="pizza_kind"

编辑:实际上,更好的选择器是$("select[name='pizza_kind']")jsfiddle链接


5

select没有ID,只有名字。您需要修改选择器:

$("#pizza").on("click", function(){
  $("select[name='pizza_kind']").prop("disabled", !this.checked);
});

演示:http//jsbin.com/imokuj/2/edit


5

很抱歉在旧线程中回答,但将来我的代码可能会对其他人有所帮助。在同一情况下,当选中复选框时,很少选中的输入字段将被启用,否则将被禁用。

$("[id*='chkAddressChange']").click(function () {
    var checked = $(this).is(':checked');
    if (checked) {
        $('.DisabledInputs').removeAttr('disabled');
    } else {
        $('.DisabledInputs').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.