javascript - 验证触发其他内容的下拉输入

标签 javascript knockout.js knockout-validation

我有一个输入,一个 <select><option> s,并且根据选择的一个,我希望出现更多的输入字段。这是它在 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>

最佳答案

有点不清楚你的代码是如何设置的,但我认为你最好将你的计算重组为可观察的并使用订阅来代替。这样您就可以对可观察值使用验证,并且在值更改时仍然更新其他属性。对于此示例,我必须对您的 View 模型做出一些假设,因此如果您的属性不在 View 模型的根上,则必须替换“self”引用。

self.protectionInput = ko.observable("").extend({ required: true });

self.protectionInput.subscribe(function(value){
  if (value == "Primary") {
      self.enhancementVisible(true);
      self.individualVisible(false);
  } else if(value == "IP14" || value == "IP16") {
      self.enhancementVisible(false);
      self.individualVisible(true);
  } else {
      self.enhancementVisible(false);
      self.individualVisible(false);
  }
});

关于javascript - 验证触发其他内容的下拉输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41577805/

相关文章:

knockout.js - knockout 风格绑定(bind)不允许我追加!重要

javascript - knockout validation 并显示工具提示

knockout.js - 使用 knockout 验证如何验证 5 位数字并接受空输入

javascript - 下载 Facebook 相册的脚本

javascript - Java 脚本 : Trying to add decimal places to my variable

javascript - 浏览器后退按钮问题

javascript - knockout.js 库中 exportProperty 函数的用途是什么?

javascript - 跟踪 Knockout.js 订阅者

javascript - knockout 验证 - 验证未绑定(bind)到正确的对象实例

javascript - Angularjs ng-repeat 在模型更改时不会更新