Найдите минутку и прочитайте;
Развязка вашего HTML, CSS и JavaScript
Вы можете создать супер универсальную функцию:
$('.js-checkbox-disable-toggle').on("click", (e) => {
var $checkbox = $(e.currentTarget);
var isChecked = $checkbox.prop('checked');
var targetSelector = $checkbox.data('target');
var $target = $(targetSelector);
$target.prop('disabled', isChecked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" class="js-checkbox-disable-toggle" data-target=".asdf, .qwerty" />I target asdf and qwerty<br/>
<input type="checkbox" class="js-checkbox-disable-toggle asdf" data-target=".qwerty" />I am asdf, I target qwerty<br/>
<input type="checkbox" class="qwerty" />I am qwerty, I don't do anything<br/>
Немного измени свой HTML:
@Html.TextAreaFor(m => m.ProfileItems[i].ProfileAnswerText,
new { disabled = "disabled", @class = "autofit disable-toggle-@(i)" })
@Html.TextAreaFor(m => m.ProfileItems[i].ProfileAnswerText,
new { @class = "autofit disable-toggle-@(i)" })
// with js-checkbox-enable-toggle
// anyone should figure out that this checkbox toggles enables :D
@Html.CheckBoxFor(m => m.ProfileItems[i].NotApp,
new { @class = "naCheckbox js-checkbox-disable-toggle", data_target=".disable-toggle-@(i)" })
, который должен отображать что-то вроде:
<textarea name="ProfileItems[1].ProfileAnswerText class="autofit disable-toggle-1">
</textarea>
<input type="checkbox"
name="ProfileItems[1].NotApp" class="naCheckbox js-checkbox-disable-toggle"
data_target=".disable-toggle-1" />
2 .. 3 .. 4 ...
Теперь в любое время, когда вы хотите, чтобы флажок включал / отключал элемент, вы можете просто добавить js-checkbox-disable-toggle
на флажок и сообщить ему, что для jQuery target через data-target
, который может быть одним или несколькими элементами или даже селекторы или даже что-то сложное, как #myform input[type=text], #myform textarea
.