Измените свойство 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).