选中复选框后禁用下拉列表

时间:2018-06-08 13:11:14

标签: jquery asp.net-mvc twitter-bootstrap-3

我的应用程序中有一个复选框和一个下拉菜单:

<div class="panel-body">
                <div class="checkbox-custom checkbox-primary" id="ProxyCheckbox">
                    @Html.CheckBoxFor(a => a.IsProxy)
                    @Html.LabelFor(a => a.IsProxy, "Is Proxy?")
                    @Html.HiddenFor(a => a.IsProxy)
                </div>
                <fieldset>
                    <legend style="display: none">Add Membership Form</legend>
                    <div class="form-group row">
                        @Html.LabelFor(m => m.SocietyId, new { @class = "hidden" })
                        <div class="col-md-12">
                            @Html.DropDownListFor(x => x.SocietyId, societies.Select(s => new SelectListItem
            {
                Text = s.SocietyName,
                Value = s.SocietyId.ToString()
            }), "Please select a society...", new { @class = "form-control", id = "proxySelect" })
                            @Html.ValidationMessageFor(x => x.SocietyId, string.Empty, new { @class = "text-danger" })
                        </div>
                    </div>

当您选中复选框时,我已经编写了一些JQuery来禁用dropdownmenu。但由于某种原因,它不起作用。我正在使用Boostrap 3。

$(document).on('click', '#ProxyCheckbox', function () {
            if ($(this).prop('checked')) {
                $('#proxySelect').attr('disabled', 'disabled');
            } else {
                $('#proxySelect').removeAttr('disabled');
            }
        });

2 个答案:

答案 0 :(得分:2)

稍微更改上面的代码:

$(document).on('click', '#ProxyCheckbox', function () {
        if ($("#IsProxy").is(':checked')) {
            $('#proxySelect').prop('disabled', 'disabled');
        } else {
            $('#proxySelect').**removeAttr**('disabled');
        }
 });

答案 1 :(得分:1)

#ProxyCheckbox是包含复选框的DIV。

首先为IsProxy复选框分配一个ID,例如

id="IsProxy"

然后,如果你想在div上维持click事件:

$(document).on('click', '#ProxyCheckbox', function () {
    $('#proxySelect').prop('disabled', $('#IsProxy').is(':checked'));
 });

如果您想在复选框本身上设置事件:

$('#IsProxy').click(function(){
    $('#proxySelect').prop('disabled', $(this).is(':checked'));
};

更新

在上一个回答中,我使用&#34; removeProp&#34;,但是,正如Rob所建议的那样,它不适用于已禁用或其他内置属性:http://api.jquery.com/removeprop/

所以我更新了答案,使用更优雅的方式,只需一行指令。