javascript と jquery (1.9.1) を使用して、オプション セクションの概念を実装したいと考えています。
基本的に、checkbox
セクション全体を有効または無効にする があります (これは ですdiv
)。
ここに作業コードがあります:
<div class="optional">
<span class="optional-activator">
<input type="checkbox" ></input>
</span>
<div class="optional-section">
<input type="text" value="sometext" />
</div>
</div>
とスクリプト:
$(function () {
$(".optional").each(function () {
var $this = $(this);
var activator = $this.find(".optional-activator :input");
var section = $this.find(".optional-section");
var sectionStateUpdate = function () {
if (activator.prop('checked')) {
section.find(":input").prop("disabled", false);
section.removeClass("inactive");
} else {
section.find(":input").prop("disabled", true);
section.addClass("inactive");
}
};
activator.change(sectionStateUpdate);
sectionStateUpdate();
});
});
これは期待どおりに機能しています。
ただし、このコードはネストされたオプション セクションをサポートしていません。上位のオプション セクションを有効にすると、下位セクションに存在する可能性に関係なく、子孫全体input
も有効になります。
たとえば、次のスニペットは期待どおりに機能しません。
<div class="optional">
<span class="optional-activator">
<input type="checkbox" />
</span>
<div class="optional-section">
<input type="text" value="sometext2" />
<div class="optional">
<span class="optional-activator">
<input type="checkbox" />
</span>
<div class="optional-section">
<input type="text" value="sometext3" />
</div>
</div>
</div>
</div>
ネストをサポートするようにコードを更新するにはどうすればよいですか?
より正確には、ルールは次のとおりです。
- オプション セクションが無効になっている場合、ネストされたオプション セクションにある場合でも、セクション内のすべての入力コントロールが無効になります。
- オプション セクションが有効な場合、すべての直接入力コントロールも有効になりますが、ネストされたオプション セクションは独自のアクティベーターを反映する必要があります。
これらのスニペットをjsfiddle コードに書き込んで、自分の動作を説明しました。