Ho impostato una pagina con il plugin di convalida a eliminazione diretta per la convalida dell'input dell'utente. Ho due elementi: uno è un normale select
e l'altro è select
con il set multiple
. L'idea è di rendere necessari entrambi gli elementi.Convalida knockout non visualizzato messaggio di errore per selezionare più
La chiamata di convalida è in corso, ma il problema è che il messaggio di errore per il multiplo selezionato non viene visualizzato.
Ecco il mio codice js:
ko.validation.init();
function isNotUndefined(val) {
return (typeof val != "undefined");
}
function isArrayNotEmpty(val) {
return (val.length > 0);
}
var viewModel = function() {
var self = this;
self.memberType = ko.observable().extend({
validation: {validator: isNotUndefined, message:'Please select gender'}
});
self.seekingTypes = ko.observableArray().extend({
validation: {validator: isArrayNotEmpty, message:'At least one option is required'}
});
self.memberTypeSource = [
{ id: 1, text: 'Man' },
{ id: 2, text: 'Woman' }
];
self.errors = ko.validation.group(self);
self.doValidation = function() {
console.log('error count=' + self.errors().length);
if (self.errors().length == 0) {
console.log('Yay.');
} else {
self.errors.showAllMessages(true);
}
};
return {
memberType: self.memberType,
seekingTypes: self.seekingTypes,
memberTypeSource: self.memberTypeSource,
errors: self.errors,
doValidation: self.doValidation,
}
};
addEventListener('load', function() {
ko.applyBindings(viewModel);
});
e questo è l'html:
Gender: <select data-bind="value: memberType,
options: memberTypeSource,
optionsText: 'text',
optionsValue: 'id',
optionsCaption: 'Please select'"></select>
<br />
Seeking: <select data-bind="selectedOptions: seekingTypes,
options: memberTypeSource,
optionsText: 'text',
optionsValue: 'id'"
multiple></select>
<br />
<button type="button" data-bind='click: doValidation'>Submit</button>
Ho anche provato la convalida con elemento di testo di input, il messaggio di errore viene visualizzato bene.
Qualsiasi aiuto è molto apprezzato.
grazie mille per aver fornito non una ma tre soluzioni per il mio problema, lo apprezzo davvero. A proposito, sapete dove posso trovare una buona documentazione sulla validazione ad eliminazione diretta (a parte quella sulla pagina wiki di github)? –
Quale versione di KO è 'makeBindingHandlerValidatable' disponibile in? Ottengo un errore dicendo che makeBindingHandlerValidatable non è una functon' ... – Azimuth
@Azimuth questa funzione fa parte della libreria di validazione KO, tuttavia non so in quale versione è stata aggiunta. Funziona bene nella 2.0.3 https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.3/knockout.validation.min.js e anche con la versione 1.0.2 https: // cdnjs.cloudflare.com/ajax/libs/knockout-validation/1.0.2/knockout.validation.min.js – nemesv