Измените свойство TextBoxFor только для чтения, если установлен флажок или нет.

Я пытаюсь изменить свойство TextBoxFor только для чтения, если флажок установлен или нет. Я читал другие посты, но ответы, кажется, не работают для меня... Я, пожалуйста, хотел бы указать на то, что мне не хватает в коде ниже.

<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>

1 ответ

Решение

Вы нацелены на div который содержит ваш флажок, который действительно не вызывает никаких change События. Установите флажок внутри div как это.

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

Кроме того, я исправил и упростил ваш код с помощью prop вместо attr, Атрибуты должны означать начальное значение данного свойства, поэтому лучше вместо этого изменить соответствующее свойство элемента.

Подробнее об использовании propсм. документацию (на основе комментария @Liam).

Другие вопросы по тегам