JQuery Convalida più campi con un errore

Come dovrei usare il plugin JQuery Validate per avere un messaggio di errore per dire 3 campi. Ad esempio 3 campi dob. Per impostazione predefinita ricevo 3 messaggi di errore se tutti e 3 i campi sono lasciati vuoti. Voglio solo un errore collegato a 3 campi. Se alcuni sono vuoti, l’errore si presenta.

Simile a quello di Chris

$("form").validate({ rules: { DayOfBirth: { required: true }, MonthOfBirth: { required: true }, YearOfBirth: { required: true } }, groups: { DateofBirth: "DayOfBirth MonthOfBirth YearOfBirth" }, errorPlacement: function(error, element) { if (element.attr("name") == "DayOfBirth" || element.attr("name") == "MonthOfBirth" || element.attr("name") == "YearOfBirth") error.insertAfter("#YearOfBirth"); else error.insertAfter(element); } }); 

È ansible utilizzare l’opzione gruppi per raggruppare gli input. Se ciascuno degli ingressi ha un messaggio di errore, verrà visualizzato solo uno.

Probabilmente vorrai sovrascrivere i messaggi associati a ciascuno dei campi, quindi avranno più senso. Ad esempio, per impostazione predefinita, potresti ricevere un messaggio di errore come “Questo campo è richiesto”. Bene, questo non fa l’utente molto bene quando ci sono tre input. Probabilmente vuoi ignorare il messaggio per dire “Il numero locale è richiesto”. Per questo esempio, ho annullato tutti i messaggi di errore con “Si prega di inserire un numero di telefono valido”.

    groups: { phoneNumber: "countryCode areaCode localNumber" }, rules: { 'countryCode': { required: true, minlength:3, maxlength:3, number:true }, 'contactInformation[areaCode]': { required: true, minlength:3, maxlength:3, number:true }, 'contactInformation[localNumber]': { required: true, minlength:4, maxlength:4, number:true }, }, messages: { "countryCode": { required: "Please enter a valid Phone Number", minlength: "Please enter a valid Phone Number", maxlength: "Please enter a valid Phone Number", number: "Please enter a valid Phone Number" }, "areaCode": { required: "Please enter a valid Phone Number", minlength: "Please enter a valid Phone Number", maxlength: "Please enter a valid Phone Number", number: "Please enter a valid Phone Number" }, "localNumber": { required: "Please enter a valid Phone Number", minlength: "Please enter a valid Phone Number", maxlength: "Please enter a valid Phone Number", number: "Please enter a valid Phone Number" } }, 

Ho pensato di doverlo condividere. Il codice completo che ha funzionato per me.

HTML

 

JS

 //hay que poblar selects de fecha dia = $('#fechanacimdia'); mes = $('#fechanacimmes'); ano = $('#fechanacimano'); dia.append(''); for(i=1;i<=31;i++) { dia.append(''); } meses = ["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"] mes.append(''); for(i=1;i<=12;i++) { mes.append(''); } d = new Date(); year = d.getFullYear(); maxage = 100; minage = 16; ano.append(''); for(i=year-minage;i>=year-maxage;i--) { ano.append(''); } //--------- validate ------------------------ $('#formulario').validate({ rules: { fechanacimdia: { required: true }, fechanacimmes: { required: true }, fechanacimano: { required: true, validdate: true } }, groups: { fechanacim: "fechanacimdia fechanacimmes fechanacimano" }, messages: { fechanacimdia: "Fecha de nacimiento no es válida.", fechanacimmes: "Fecha de nacimiento no es válida.", fechanacimano: "Fecha de nacimiento no es válida." }, }); //funcion auxiliar para validar fecha de nacimiento correcta jQuery.validator.addMethod("validdate", function(value, element) { var month = +$('#fechanacimmes').val() - 1; // Convert to numbers with "+" prefix var day = +$('#fechanacimdia').val(); var year = +$('#fechanacimano').val(); var date = new Date(year, month, day); // Use the proper constructor return date.getFullYear() == year && date.getMonth() == month && date.getDate() == day; }); 

questo è per la parte HTML:

 

Date of birth:

*

dd

mm

yyyy

Questo è lo script che ho usato:

 $(document).ready(function() { $("#myForm").validate({ groups: { dateOfBirth: "dobDay dobMonth dobYear" }, rules: { 'dobDay': { required: true, minlength:1, maxlength:2, range: [1, 31], number:true }, 'dobMonth': { required: true, minlength:1, maxlength:2, range: [1, 12], number:true }, 'dobYear': { required: true, minlength:4, maxlength:4, number:true }, }, }); }); 

tutta la parte HTML può essere personalizzata come meglio credi. Ho usato questo layout complesso perché avevo bisogno di aggiungere questo campo a un modulo già esistente. Ma è un esempio che funziona! Spero che aiuti chiunque!

La mia opinione è stata quella di cambiare il jQuery validator per validare qualsiasi cosa con l’attributo validateable su di esso e gli input standard. Qui puoi ottenere la versione modificata del 1.9.0 del plugin

Fondamentalmente si importa il nuovo validatore jQuery e si fa qualcosa del genere:

  

Le modifiche richieste su jQuery validator dovevano renderlo utilizza .attr('name') posto di .name perché .name funziona solo sui campi del modulo. E modificare i gestori di chiavi e così via per legarli ai bambini dell’elemento validateable .

Questo è un po ‘più dinamico dei gruppi in quanto consente di convalidare i campi in relazione tra loro piuttosto che come singole entity framework.

Questo codice mostrerà un errore comune se uno dei campi richiesti è vuoto.

        

    Un paio di opzioni: controlla errorContainer . Puoi fare in modo che tutti gli errori vadano a un

    completamente separato. Oppure puoi controllare il blocco invalid e avere semplicemente un comando errorMessage.show() .