JQuery validator и datepicker click not validating
Я использую jquery validator для проверки ввода текста. У меня есть проблема: если я нажму кнопку "Отправить", он отобразит все сообщения об ошибках правильно. Однако на входе datepicker, чтобы очистить сообщение об ошибке, я должен дважды выбрать дату. то есть; 1 нажмите, чтобы выбрать, и он правильно вводит данные. 2-й клик, чтобы удалить сообщение об ошибке.
Я где-то читал об использовании события 'on' на datepicker, поэтому я попробовал это, но это не имело значения. Я не думаю, что это правильно закодировано. Я предполагаю, что недействительные и успешные классы являются частью валидатора script. Стоит попробовать.
Что может быть здесь? Благодаря
Sciprt code
<script type="text/javascript">
$(function() {
$("#datepicker").datepicker({
changeMonth: true,
changeYear: true,
yearRange: '2011:2037',
dateFormat: 'dd/mm/yy',
minDate: 0,
defaultDate: null
}).on('changeDate', function(ev) {
if($('#datepicker').valid()){
$('#datepicker').removeClass('invalid').addClass('success');
}
});
});
</script>
html code
<label for"datepicker">
<input id="datepicker" name="datepicker" type="text" />
</label>
код релевантного валидатора
Правила/раздел сообщений
datepicker:
{
required: true,
date: true
},
datepicker:
{
required: " * required: You must enter a destruction date",
date: "Can contain digits only"
}
Ответы
Ответ 1
Цитата OP:
"Мне нужно дважды выбрать дату, т.е. 1 щелчок, чтобы выбрать, и он правильно вводит данные. 2-й клик, чтобы удалить сообщение об ошибке.
Это потому, что валидация обычно срабатывает при событиях keyup
и blur
. Поскольку вы используете средство выбора даты для взаимодействия с полем, а не с клавиатурой, вы мешаете нормальным событиям запуска.
Ваш код должен компенсировать, но он слишком убит...
$(function() {
$("#datepicker").datepicker({ ... })
.on('changeDate', function(ev) {
if($('#datepicker').valid()){
$('#datepicker').removeClass('invalid').addClass('success');
}
});
});
Вам нужно только вызвать метод .valid()
в поле при изменении значения.
$(function() {
$("#datepicker").datepicker({ ... })
.on('changeDate', function(ev) {
$(this).valid(); // triggers the validation test
// '$(this)' refers to '$("#datepicker")'
});
});
Однако это в основном то же самое, что и раньше.
Что такое changeDate
? Это что-то определено вашим плагином datepicker? Это не стандартное событие jQuery, так что, вероятно, вся проблема. Попробуйте стандартное событие change
вместо этого.
$(function() {
$("#datepicker").datepicker({
changeMonth: true,
changeYear: true,
yearRange: '2011:2037',
dateFormat: 'dd/mm/yy',
minDate: 0,
defaultDate: null
}).on('change', function() {
$(this).valid(); // triggers the validation test
// '$(this)' refers to '$("#datepicker")'
});
});
Ответ 2
Sparky ответ работал отлично для меня, единственное, что я бы изменил, вместо использования id, я просто использовал jquery this в функции on, то есть:
.on('change', function() {
$(this).valid();
});
Это просто делает его немного более общим.
-D
Ответ 3
Если вы используете JQuery Form Validator (http://www.formvalidator.net/)
и вы хотите использовать bootstarp datepicker, а затем просто добавьте class= "hasDatepicker" для ввода элемента. Он работал у меня.
<input type="text" name='birth_date' class="form-control hasDatepicker" id="datepicker" value="" data-validation="birthdate" data-validation-format="mm/dd/yyyy">