Вы можете воспользоваться вашим макетом и заставить все ваши обработчики находить вещи относительно, сокращая весь ваш текущий код так:
$(function() {
$("input:disabled").addClass("disabled");
$(":radio").change(function() {
var disabled = this.checked && this.value == "No";
$(this).siblings("div").find("input")
.attr('disabled', disabled)
.toggleClass('disabled', disabled);
});
});
Вы можете посмотреть демо здесь , также, поскольку вы знаете, какой класс, элементы и хотите ли вы, чтобы он был включен или выключен, вы можете использовать .toggleClass(class, bool)
, чтобы сократить но дальше. Если вы хотите, чтобы это было более точно, вы можете назначить этим переключателям класс, например:
<input type="radio" name="Group1" id="Radio1" value="Yes" class="toggler" />
Тогда вы можете сделать $(".toggler")
вместо $(":radio")
, то же самое для div
, вы можете присвоить ему класс и сделать .siblings(".fields")
вместо .siblings("div")
... смысл в том, что ваш макет соответствует используйте это в своих интересах, когда СУХОЕ кодирование .