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

izi*_*dor 168 html forms jquery

我想以类似的形式创建一个选项

[] I would like to order a [selectbox with pizza] pizza
Run Code Online (Sandbox Code Playgroud)

其中selectbox仅在选中复选框时启用,未选中时禁用.

我想出了这段代码:

<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>
Run Code Online (Sandbox Code Playgroud)

我尝试了各种方法如何使用设置禁用属性.prop(),.attr().disabled=.然而,没有任何反应.当应用于<input type="checkbox">代替时<select>,代码完美地运行.

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

Com*_*ess 286

您想使用这样的代码:

<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>
Run Code Online (Sandbox Code Playgroud)

这是一个有效的例子

  • `$('#pizza_kind').prop('disabled',false);`和`$('#pizza_kind').prop('disabled',true);`.正如[jQuery的文档说明](http://api.jquery.com/prop/):_属性通常会影响DOM元素的动态状态,而不会更改序列化的HTML属性.示例包括输入元素的value属性,输入和按钮的disabled属性或复选框的checked属性.应该使用.prop()方法来设置disabled和checked而不是.attr()方法..val()方法应该用于获取和设置value._ (31认同)
  • 什么是$(update_pizza); 在做什么?将函数包装在jquery对象中? (3认同)
  • 对于 jQuery 3,它应该是“$('#pizza_kind').prop('disabled', true/false);” 据我所知 (2认同)

Obs*_*vus 116

要能够禁用/启用选择首先需要一个ID或类.然后你可以做这样的事情:

禁用:

$('#id').attr('disabled', 'disabled');
Run Code Online (Sandbox Code Playgroud)

启用:

$('#id').removeAttr('disabled');
Run Code Online (Sandbox Code Playgroud)

  • ".prop()方法应该用于设置disabled和checked而不是.attr()方法"source:http://api.jquery.com/prop/ (7认同)
  • 这应该是选择的答案..对于略读更好:) (2认同)

Azt*_*eca 22

Disabled是WHATWG所说的select元素布尔属性,这意味着使用jQuery 禁用正确方法将是

jQuery("#selectId").attr('disabled',true);
Run Code Online (Sandbox Code Playgroud)

这将使这个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>
Run Code Online (Sandbox Code Playgroud)

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

然而,它也可以用它作为财产

jQuery("#selectId").prop('disabled', 'disabled');
Run Code Online (Sandbox Code Playgroud)

越来越

<select id="selectId" name="gender" disabled>
Run Code Online (Sandbox Code Playgroud)

这仅适用于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>
Run Code Online (Sandbox Code Playgroud)


The*_*art 16

只需使用:

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

update_pizza();
$("#pizza").change(update_pizza);
Run Code Online (Sandbox Code Playgroud)

DEMO


K Z*_*K Z 8

使用以下内容:

$("select").attr("disabled", "disabled");
Run Code Online (Sandbox Code Playgroud)

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

你的代码不起作用的原因很简单,因为$("#pizza_kind")它没有选择<select>元素,因为它没有id="pizza_kind".

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


Sam*_*son 5

select没有身份证,只有姓名.您需要修改选择器:

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

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


Mou*_*Mou 5

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

$("[id*='chkAddressChange']").click(function () {
    var checked = $(this).is(':checked');
    if (checked) {
        $('.DisabledInputs').removeAttr('disabled');
    } else {
        $('.DisabledInputs').attr('disabled', 'disabled');
    }
});
Run Code Online (Sandbox Code Playgroud)