I'm using the "equal" validation rule.
self.FirstName = ko.observable();
self.Lastname = ko.observable();
self.ValidationMessage = ko.computed(function(){
return 'This is my dynamic validation message. ' + self.FirstName() + ' ' + self.LastName()
});
self.MyComputed = ko.computed(function() {
// Keep it simple for example purpose
return true;
}).extend({ equal: { message: self.ValidationMessage, params: false } });
I would like to know if there is any way to make the validation message dynamic based on a computed value or other observables.
you dont need self.ValidationMessage
. instead use a function
as message and it will get called dynamically.
function vm() {
var self = this;
self.FirstName = ko.observable();
self.LastName = ko.observable().extend({
equal: {
message: function(params, observable) {
return 'First Name: ' + params + ' and Last Name: ' + observable() + ' are not the same.';
},
params: self.FirstName
}
});
}
ko.applyBindings(new vm());
.validationMessage { display: block; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.3/knockout.validation.min.js"></script>
<input data-bind="textInput: FirstName"><input data-bind="textInput: LastName">