2009-08-17 21 views
55

¿Cómo usaría el complemento JQuery Validate para tener un mensaje de error para decir 3 campos? Por ejemplo 3 campos dob. De forma predeterminada obtendré 3 mensajes de error si los 3 campos se dejan en blanco. Solo quiero un error vinculado a 3 campos. Si alguno está en blanco, aparece el error.JQuery Validar campos múltiples con un error

Respuesta

0

Un par de opciones: echa un vistazo a errorContainer. Puede hacer que todos los errores vayan a un <div> completamente separado. O puede consultar el bloque invalid y simplemente tener un comando errorMessage.show().

13

Puede usar la opción de grupos para agrupar entradas juntas. Si cada una de las entradas tiene un mensaje de error, solo se mostrará una.

Es probable que desee sobrescribir los mensajes asociados con cada uno de los campos, por lo que tendrán más sentido. Por ejemplo, de forma predeterminada, puede recibir un mensaje de error como "Este campo es obligatorio". Bueno, eso no le hace mucho bien al usuario cuando hay tres entradas. Probablemente desee anular el mensaje para decir "Se requiere el número local". Para este ejemplo, simplemente elimino todos los mensajes de error con "Ingrese un número de teléfono válido".

<input type="text" name="countryCode" /> 
<input type="text" name="areaCode" /> 
<input type="text" name="localNumber" /> 

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" 
    } 
}, 
1

Este código mostrará un error común si alguno de los campos obligatorios está en blanco.

<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    <script> 
$(document).ready(function(){ 
    $("#myform").validate({ 
    invalidHandler: function(form, validator) { 
     var errors = validator.numberOfInvalids(); 
     if (errors) { 
     var message ='You missed ' + errors + ' fields.'; 
     $("#messageBox").html(message); 
     $("#messageBox").show(); 
     } else { 
     $("#messageBox").hide(); 
     } 
    }, 
    showErrors: function(errorMap, errorList) { 

    }, 
    submitHandler: function() { alert("Submit!") } 
}) 
}); 
</script> 

</head> 
<body> 
    <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/validate/jquery.validate.js"></script> 
<div id="messageBox"></div> 
<ul id="errorlist"></ul> 
<form id="myform" action="/loginurl" method="post"> 
    <label>DOB1</label> 
    <input name="dob1" class="required" /> 
    <label>DOB2</label> 
    <input name="dob2" class="required" /> 
    <label>DOB3</label> 
    <input name="dob3" class="required" /> 
    <br/> 
    <input type="submit" value="Submit"/> 
</form> 
</body> 
</html> 
+0

Creo que este error aparece incluso si hay un error de formato u otra cosa – Starx

54

similar a la de 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); 
    } 
}); 
+0

genial, gracias hombre! –

+4

con mvc 3, cómo escribir este adaptador jquery.validaet? – dfang

+0

Gracias ... Funcionó para mí –

3

esto es para la parte HTML:

<div> 
    <p class="myLabel left">Date of birth:</p> 
    <p class="mandatory left">*</p> 
    <div class="left"> 
     <p><input type="text" name="dobDay" class="required" /></p> 
     <p><i>dd</i></p> 
    </div> 
    <div class="left"> 
     <p><input type="text" name="dobMonth" class="required" /></p> 
     <p><i>mm</i></p> 
    </div> 
    <div class="left"> 
     <p><input type="text" name="dobYear" class="required" /></p> 
     <p><i>yyyy</i></p> 
    </div> 
    <div class="clear"></div> 
    <div class="myError"> 
     <label for="dateOfBirth" class="error">Please enter a valid date.</label> 
    </div> 
</div> 

Este es el script que utilicé:

$(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 
     }, 
    }, 
}); 
}); 

toda la parte HTML puede personalízate como mejor te parezca. Usé este diseño complejo porque necesitaba agregar este campo a un formulario ya existente. ¡Pero es un ejemplo que funciona! Espero que ayude a cualquiera!

4

Pensé que debería compartir esto. El código completo que funcionó para mí.

HTML

<div class="clearfix bl"> 
    <label>Fecha de nacimiento</label> 
    <select name="fechanacimdia" id="fechanacimdia"></select> 
    <select name="fechanacimmes" id="fechanacimmes"></select> 
    <select name="fechanacimano" id="fechanacimano"></select> 
</div> 

JS

//hay que poblar selects de fecha 
dia = $('#fechanacimdia'); 
mes = $('#fechanacimmes'); 
ano = $('#fechanacimano'); 
dia.append('<option>Día</option>'); 
for(i=1;i<=31;i++) { 
    dia.append('<option value="'+i+'">'+i+'</option>'); 
} 
meses = ["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"] 
mes.append('<option>Mes</option>'); 
for(i=1;i<=12;i++) { 
    mes.append('<option value="'+i+'">'+meses[i-1]+'</option>'); 
} 
d = new Date(); 
year = d.getFullYear(); 
maxage = 100; 
minage = 16; 
ano.append('<option>Año</option>'); 
for(i=year-minage;i>=year-maxage;i--) { 
    ano.append('<option value="'+i+'">'+i+'</option>'); 
} 


//--------- 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; 
}); 
+0

Utilicé este código y funciona bien para verificar las fechas ..pero cuando elijo el día no verifica si se selecciona mes o año, simplemente pasa la validación. ¿Alguna idea de lo que podría ser esto? – Limon

2

Mi opinión sobre ella era cambiar jQuery validator para validar cualquier cosa con el atributo validateable en él, así como las entradas estándar. Usted puede obtener el 1.9.0 versión modificada del plugin here

Básicamente se importa el nuevo validador de jQuery y hacer algo como esto:

<script> 
$.validator.addMethod(
    "groupnotnull", 
    function(value, element) { 
     return $("input[type='text']:filled",element).length!=0; 
    }, 
    function(regexp, element) { 
     return "At least one input must be specified"; 
    } 
); 
</script> 

<div validateable="true" name="groupValidated" groupnotnull="true"> 
    <input type="text" name="foo"/> 
    <input type="text" name="blah"/> 
</div> 

Las modificaciones requeridas en jQuery validator se va a hacer que use .attr('name') en lugar de .name porque .name solo funciona en campos de formulario. Y modifique los manipuladores de teclas, etc. para enlazar a elementos secundarios del elemento validateable.

Esto es un poco más dinámico que los grupos, ya que permite validar los campos entre sí en lugar de solo como entidades individuales.

Cuestiones relacionadas