Javascript 结合两个观察值的敲除JS验证?

Javascript 结合两个观察值的敲除JS验证?,javascript,validation,knockout.js,Javascript,Validation,Knockout.js,我有以下用户界面: 我们对其频率有收入限制。例如,如果选择“每月”,则用户可以输入的最大值为999999.99,但是,如果选择“每两周”,则用户可以输入的最大值为499999.99 如何使用KnockoutJS及其验证库()实现这一点 现在,我有以下几点: self.validate = ko.validatedObservable([ self.usualTakeHomePayAmount.extend({ min: { params: 0, messag

我有以下用户界面:

我们对其频率有收入限制。例如,如果选择“每月”,则用户可以输入的最大值为
999999.99
,但是,如果选择“每两周”,则用户可以输入的最大值为
499999.99

如何使用KnockoutJS及其验证库()实现这一点

现在,我有以下几点:

self.validate = ko.validatedObservable([
  self.usualTakeHomePayAmount.extend({
    min: {
      params: 0,
      message: minCurrencyAmountErrorMessage.toString()
    },
    max: {
      params: 999999.99,
      message: maxCurrencyAmountErrorMessage.toString()
    }
  })]);
但很明显,这并没有考虑到频率场(在屏幕截图中标题为“频率”)


如何实现所需的验证?

您可以创建一个计算值,根据所选频率返回最大金额,然后使用该值

self.maxValue = ko.pureComputed(function() {
    switch(self.selectedFrequency())
        case "fortnightly":
            return 499999.99
        case "monthly":
            return 999999.99
        default:
            return 999999.99
});
然后在需要引用最大值的位置使用此计算值:

self.validate = ko.validatedObservable([
    self.usualTakeHomePayAmount.extend({
        min: {
            params: 0,
            message: minCurrencyAmountErrorMessage.toString()
        },
        max: {
            params: self.maxValue(),
            message: maxCurrencyAmountErrorMessage.toString()
        }
})]);

我在这里假设你有一个叫做selectedFrequency的可观测频率。我没有对此进行过任何测试,但希望它能为您提供一种方法。

这似乎是一个不错的想法,但不起作用。假设您是每月一次,然后键入
9999999.99
,但随后您从每月一次更改为每两周一次,验证不会再次触发,以告知您现在验证无效!你的想法给了我一个解决这个问题的办法。我创建了一个函数,我在其中传递频率,它将返回最大值。