Javascript 使用可观察参数取消自定义验证

Javascript 使用可观察参数取消自定义验证,javascript,validation,knockout.js,knockout-validation,Javascript,Validation,Knockout.js,Knockout Validation,我需要验证视图模型中字段的最大数量。但是,最大金额必须是可变的,并根据在此模型之外选择的UI项目进行计算。我已经尝试在自定义验证器中包含可观测值作为参数,但当值发生更改时,它似乎不会更新 我有一种感觉,一旦验证代码第一次执行,它就会保留参数 未使用敲除的列表的HTML <select id="ContentsReplacementAmount"> <option value="25000">£25000</option> <option

我需要验证视图模型中字段的最大数量。但是,最大金额必须是可变的,并根据在此模型之外选择的UI项目进行计算。我已经尝试在自定义验证器中包含可观测值作为参数,但当值发生更改时,它似乎不会更新

我有一种感觉,一旦验证代码第一次执行,它就会保留参数

未使用敲除的列表的HTML

<select id="ContentsReplacementAmount">
    <option value="25000">£25000</option>
    <option value="50000">£50000</option>
    <option value="75000">£75000</option>
</select>

我的问题是,我怎样才能做到这一点呢?

这是一个冒险,因为我对验证插件不太熟悉,但请尝试一下

    validation: {
        validator: function (val, max) {
            return val <= max();
        },
        message: 'The amount must be a maximum of £{0}',
        params: self.maxSpecifiedItemAmount
    }
验证:{
验证器:函数(val,max){

return val我现在使用以下代码设法解决了这个问题:

创建自定义验证器函数

var customMax = function(val, max) {
    return val <= max();
};

通常我会得到一个以$(asdf).val()表示的数字字符串通常===或其类型的副作用在本例中是一个字符串,但在我的应用程序中不是。它不会改变。还有其他想法吗?如果我这样做,我会更新上面的代码。它如何清除
self.maxSpecifiedItemAmount的值更改后,我想验证会清除它
    validation: {
        validator: function (val, max) {
            return val <= max();
        },
        message: 'The amount must be a maximum of £{0}',
        params: self.maxSpecifiedItemAmount
    }
var customMax = function(val, max) {
    return val <= max();
};
var SpecifiedValuablesViewModel  = function (maxSpecifiedItemAmount) {
    var self = this;

    self.maxSpecifiedItemAmount = ko.observable(maxSpecifiedItemAmount);

    self.amountToAdd = ko.observable().extend({
        validation: {
            validator: customMax,
            message: function () { return 'The maximum allowed is ' + self.maxSpecifiedItemAmount(); },
            params: self.maxSpecifiedItemAmount
        }
    });

    self.maxSpecifiedItemAmount.subscribe(function (amount) {
        self.amountToAdd.isModified(false);
    });
};

var specifiedValuablesViewModel = new SpecifiedValuablesViewModel($('#ContentsReplacementAmount').val());
ko.applyBindings(ko.validatedObservable(specifiedValuablesViewModel), document.getElementById('SpecifiedValuables'));

$('#ContentsReplacementAmount').on('change', function () {
    specifiedValuablesViewModel.maxSpecifiedItemAmount(parseInt($(this).val()));
});