У меня возникла проблема с плагином проверки jquery, который не удаляет класс ошибки в пустой записи (что разрешено) в этом случае. Я применяю только одно настраиваемое правило к вводу, которое допускает пустой ввод.
В качестве примера...
Итак, я думаю, мой вопрос в том, почему сообщение об ошибке удалено правильно, но класс для ввода не удаляется (выделение красным цветом)?
Я проверил это в firebug... класс has-error не удаляется из <div class="col-md-6 form-group">
при удалении ####, но это если я удалю и введите один действительный символ.
HTML:
<div class="col-md-6 form-group">
<label><b>First Name</b></label>
<div class="input-group">
<span class="input-group-addon">
<i class="fa fa-user fa-fw"></i>
</span>
<input class="form-control" type="text" name="fname" <?php echo ($_SESSION['account']['fname'] ? 'data-default="true" value="'.$_SESSION['account']['fname'].'"' : 'placeholder="first name"'); ?>/>
</div>
<span class="help-block"></span>
</div>
ЯШ:
$('#account-info-form').validate({
errorElement: 'span', //default input error message container
errorClass: 'help-block', // default input error message class
focusInvalid: false, // do not focus the last invalid input
rules: {
fname: {
cname: true
}
},
messages: {
fname: {
cname: "Enter a valid first name."
}
},
highlight: function (element) { // hightlight error inputs
$(element)
.closest('.form-group').addClass('has-error'); // set error class to the control group
},
success: function (label) {
label.closest('.form-group').removeClass('has-error');
label.remove();
},
errorPlacement: function (error, element) {
error.insertAfter(element.closest('.input-group'));
}
});
// custom name (first or last) validation
$.validator.addMethod("cname", function (value,element) {
return this.optional(element) || /^[a-z][a-z .,\-]{0,31}$|^$/i.test(value);
},"Please enter a valid name.");
// return default values on blank and do not cause error (if valid)
$('input[data-default="true"]').on('blur', function() {
if ( $(this).val() == '' ) {
$(this).val( this.defaultValue );
$(this).valid();
}
});
В документах я смог найти "несвежие", которые, я думаю, я пропустил ранее.
unhighlight: function (element) { // un-hightlight error inputs
$(element)
.closest('.form-group').removeClass('has-error');
},
Я думаю, вам нужно использовать .length
$('input[data-default="true"]').on('blur', function() {
if ( $(this).length==0) {
$(this).val( this.defaultValue );
$(this).valid();
}
});
РЕДАКТИРОВАНИЕ
Пустые поля должны пройти проверку, и только допустимые поля будут проверяться на наличие допустимых символов.
$_SESSION['account']['fname']
сейчас не установлено, так как я только что тестирую, поэтому вход получает только 'placeholder="first name"
от php. У меня нет проблем с этим обработчиком, так как он корректно работает с другими входами.
unhighlight
является дополнением кhighlight
. Где-то там должна быть плохая демонстрация, потому что на SO мы слишком часто видим, чтоsuccess
неправильно используется вместоunhighlight
.