更改 TextBoxFor readonly 属性 是否选中复选框

Change an TextBoxFor readonly property on whether a checkbox is checked or not

我正在尝试更改 TextBoxFor readonly 属性 是否选中复选框。 我已经阅读了其他帖子,但答案似乎对我不起作用.. 请任何人指出我在下面的代码中遗漏的内容。

<div class="editor-label">
                @Html.LabelFor(m => m.AddFitbit)
            </div>
            <div class="editor-field" id="checkBox">
                @Html.CheckBoxFor(m => m.AddFitbit)
            </div>
            <div class="editor-label">
                @Html.LabelFor(m => m.Mail)
            </div>
            <div class="editor-field" id="userMail">
                @Html.TextBoxFor(m => m.Mail)
            </div>
            <br />
            <input class="submit" type="submit" value="@LangResources.Create" />
            <button onclick="history.back(); return false;">@LangResources.BtnCancel</button>
        </div>
    </article>
}

@Html.ValidationSummary(true, LangResources.ScreenAddGeneralError)

<script type="text/javascript">
    $(function() {
        $('#checkBox').change(function () {
            if ($(this).is(':checked')) {
                $('#userMail').attr('readonly');
            } else {
                $('#userMail').removeAttr('readonly');
            }
        });
    });
</script>

您将包含您的复选框的 div 定位为目标,它确实不会触发任何 change 事件。像这样定位 div 内的复选框。

$(function() {
    $('#checkBox input[type="checkbox"]').change(function () {
        $('#userMail input[type="text"]').prop('readonly', $(this).is(':checked'));
    });
});

此外,我使用 prop 而不是 attr 更正并简化了您的代码。属性应该表示给定 属性 的初始值,因此最好改为更改相应的元素 属性。

有关使用 prop 的详细信息,请参阅 the documentation(基于@Liam 的评论)。