У меня есть приложение, построенное на asp.net MVC и использующее начальную загрузку Twitters. Чтобы заставить стили начальной загрузки работать, я добавил:
$.validator.setDefaults({
highlight: function (element) {
$(element).closest(".control-group").addClass("error");
},
unhighlight: function (element) {
$(element).closest(".control-group").removeClass("error");
}
});
Все идет нормально. Сегодня я добавил cleditor на сайт и потерял проверку текстовой области, потому что cleditor скрывает ее (как и все редакторы wysiwyg). Поэтому я добавил следующий код, который исправил это.
$.validator.setDefaults({ ignore: '' });
Затем я добавил функцию, которая выполняет некоторую работу с текстовой областью перед проверкой. Это обязательное поле, поэтому я проверяю, содержит ли оно только пробелы, неразрывные пробелы и разрывы. Если это так, я очищаю его, чтобы моя проверка уловила его правильно.
$('#myForm').submit(function () {
var contents = editor[0].$area[0].value;
var patt1 = new RegExp('^((<br>)*(\s)*( )*)*$');
if (contents.match(patt1))
editor[0].$area[0].value = '';
return true;
});
Эта функция срабатывает перед проверкой, отправка формы останавливается и отображаются сообщения об ошибках, и это хорошо. Проблема в том, что значения по умолчанию для валидатора, установленные выше, не срабатывают, поэтому поля имеют неправильный стиль.
Еще более странным является то, что если я отправляю форму во второй раз, запускаются значения по умолчанию валидатора, и поля оформляются соответствующим образом.
Я могу обойти это, создав настраиваемый атрибут проверки в MVC, но мне все же хотелось бы знать, почему это ведет себя таким образом, и могу ли я это исправить.
В качестве примечания: регулярное выражение, которое я использую выше для поиска комбинаций пробелов, разрывов и т. д., не работает. Я поместил его в два тестера регулярных выражений, и он отлично работает. В моем приложении он не находит совпадений. Я новичок в регулярных выражениях, поэтому, вероятно, есть гораздо лучший способ написать это.