我想使用 javascript 和 jquery (1.9.1) 来实现可选部分的概念。
基本上,我有一个checkbox
启用或禁用整个部分(即 a 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 代码以说明我的行为。