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