2009-08-17 4 views
55

Как использовать плагин JQuery Validate, чтобы иметь одно сообщение об ошибке для 3 полей. Например, 3 поля dob. По умолчанию я получаю 3 сообщения об ошибках, если все 3 поля остаются пустыми. Мне нужна только одна ошибка, связанная с 3 полями. Если какая-либо ошибка, ошибка возникает.JQuery Проверять несколько полей с одной ошибкой

ответ

0

Пара вариантов: Проверьте errorContainer. Вы можете сделать все ошибки полностью разделенными <div>. Или вы можете проверить блок invalid и просто иметь команду errorMessage.show().

13

Вы можете использовать группу, чтобы группировать входы. Если каждый из входов имеет сообщение об ошибке, будет отображаться только один.

Возможно, вы захотите переопределить сообщения, связанные с каждым из полей, поэтому они будут иметь больше смысла. Например, по умолчанию вы можете получить сообщение об ошибке типа «Это поле обязательно». Ну, это не делает пользователя много хорошего, когда есть три входа. Вероятно, вы хотите переопределить сообщение, чтобы сказать «Требуется местный номер». В этом примере я просто перевернул все сообщения об ошибках с помощью «Пожалуйста, введите действительный номер телефона».

<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

Этот код отображает одну общую ошибку, если какое-либо из обязательных полей пуст.

<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

Думаю, эта ошибка появляется, даже если есть ошибка формата или что-то еще – Starx

54

Подобно Криса

$("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

круто, спасибо человеку! –

+4

с mvc 3, как написать этот адаптер jquery.validaet? – dfang

+0

Спасибо ... Это сработало для меня –

3

это для 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> 

Это сценарий, я использовал:

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

все HTML часть может быть настроенным по своему усмотрению. Я использовал этот сложный макет, потому что мне нужно было добавить это поле в уже существующую форму. Но это пример, который работает! Надеюсь, это поможет любому!

4

Я думал, что должен поделиться этим. Полный код, который работал для меня.

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

Я использовал этот код и отлично работаю для проверки дат .. но когда я выбираю день, он не проверяет, выбран ли месяц или год, он просто проходит проверку. Любая идея, что это может быть? – Limon

2

Мой взгляд на это должно было изменить jQuery validator, чтобы проверить что-либо с атрибутом validateable на нем, а также стандартные входы. Вы можете получить 1.9.0 модифицированную версию плагина here

В основном вы импортировать новый Jquery валидатор и сделать что-то вроде этого:

<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> 

Модификации, необходимые на jQuery validator должны были сделать его использовать .attr('name') вместо .name, потому что .name работает только с полями формы. И измените обработчики клавиш и т. Д., Чтобы привязать их к дочерним элементам validateable.

Это немного более динамично, чем группы, поскольку он позволяет проверять поля относительно друг друга, а не как отдельные объекты.

Смежные вопросы