From 9de380e3934501b80eb4ad7f24bda5b6e792bd08 Mon Sep 17 00:00:00 2001 From: PedroLV Date: Sat, 20 Feb 2021 11:22:11 +0100 Subject: [PATCH] One ValidationElement for an array of fields. It is usefull when you need to validate several fields in the same node --- src/bindingHandlers.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/bindingHandlers.js b/src/bindingHandlers.js index cdfc53bf..3126df85 100644 --- a/src/bindingHandlers.js +++ b/src/bindingHandlers.js @@ -137,6 +137,28 @@ ko.bindingHandlers['validationElement'] = { }); } }; +//Allow to use a single element for several fields +ko.bindingHandlers['validationElementArray'] = { + update: function (element, valueAccessor, allBindingsAccessor, viewModel, context) { + + var hasError = false; + var list = valueAccessor();//array observable expected + + for (var _i = 0; _i < list.length; _i++) { + var obs = list[_i]; + hasError = !(obs.isValid && obs.isValid());//only update validationElement on first error. + if (hasError) { + ko.bindingHandlers.validationElement.update(element, function() { return obs; }, allBindingsAccessor, viewModel, context); + break; + } + } + //no error found, we have to update at least one of the list. + if (!hasError && list.length > 0) { + ko.bindingHandlers.validationElement.update(element, function(){ return list[0]; }, allBindingsAccessor, viewModel, context); + } + + } +}; // ValidationOptions: // This binding handler allows you to override the initial config by setting any of the options for a specific element or context of elements