【发布时间】:2017-05-25 11:20:13
【问题描述】:
我有一个输入,<option>s 的 <select>,根据选择的输入,我希望显示更多输入字段。这就是它在 js 中的样子:
protectionInput: ko.computed({
read: function () {
return "";
},
write: function (value) {
if (value == "Primary") {
viewModel.enhancementVisible(true);
viewModel.individualVisible(false);
} else if(value == "IP14" || value == "IP16") {
viewModel.enhancementVisible(false);
viewModel.individualVisible(true);
} else {
viewModel.enhancementVisible(false);
viewModel.individualVisible(false);
}
},
})
问题是,我还需要将其设为必填字段,以便选择其中一个选项。对于我的其他输入(使用 ko-validation),它有效:
someInput: ko.observable().extend({
required: true,
}),
但是当我将它添加到上面计算的一个时,即使选择了一个选项,它也总是评估为无效。
有什么想法吗?如果我以愚蠢的方式做到了这一点,我很高兴重组。提前感谢您的帮助!
PS,这就是标记的样子:
<div class="form">
<label>Type of protection</label>
<select data-bind="value:protectionInput" required>
<option value="" disabled selected hidden>Please select an option</option>
<option>Primary</option>
<option>FP12</option>
<option>FP14</option>
<option>FP16</option>
<option>IP14</option>
<option>IP16</option>
</select>
<label>Enhancement factor</label>
</div>
<div class="form" data-bind="visible: enhancementVisible">
<input type="number" data-bind="value:enhancementInput" required min="0" max="100" />
</div>
<div class="form" data-bind="visible: individualVisible">
<label>Individual factor</label>
<input type="number" data-bind="value:individualInput" required />
</div>
【问题讨论】:
-
首先我猜你在计算的写入部分设置你的变量 true/false 你打算设置 ___Visible(true/false) 而不是 ___Input(true/false)?
-
没错——调整了变量名称以便在此处发布它并清理了一点 css,所以忘了更改它。 (现在已为将来访问并试图理解此代码的任何人修复它)
标签: javascript knockout.js knockout-validation