Интересное решение состоит в том, чтобы сделать это декларативным: вы просто даете каждому div, который должен отображаться, атрибут automaticallyVisibleIfIdChecked
с идентификатором флажка или переключателя, от которого он зависит. То есть ваша форма выглядит так:
<form name="form1" id="my_form" method="post" action="">
<div><label><input type="radio" name="group1" id="rdio1" value="opt1">opt1</label></div>
<div><label><input type="radio" name="group1" id="rdio2" value="opt2">opt2</label></div>
</form>
....
<div id="opt1" automaticallyVisibleIfIdChecked="rdio1">lorem ipsum dolor</div>
<div id="opt2" automaticallyVisibleIfIdChecked="rdio2">consectetur adipisicing</div>
и есть некоторый независимый от страницы JavaScript, который прекрасно использует функциональное программирование:
function executeAutomaticVisibility(name) {
$("[name="+name+"]:checked").each(function() {
$("[automaticallyVisibleIfIdChecked=" + this.id+"]").show();
});
$("[name="+name+"]:not(:checked)").each(function() {
$("[automaticallyVisibleIfIdChecked=" + this.id+"]").hide();
});
}
$(document).ready( function() {
triggers = $("[automaticallyVisibleIfIdChecked]")
.map(function(){ return $("#" + $(this).attr("automaticallyVisibleIfIdChecked")).get() })
$.unique(triggers);
triggers.each( function() {
executeAutomaticVisibility(this.name);
$(this).change( function(){ executeAutomaticVisibility(this.name); } );
});
});
Аналогичным образом вы можете автоматически включать / отключать поля формы с атрибутом automaticallyEnabledIfChecked
.
Я думаю, что этот метод хорош, поскольку он не требует создания конкретного JavaScript для вашей страницы - вы просто вставляете некоторые атрибуты, которые говорят, что нужно делать.