diff --git a/js/comment.js b/js/comment.js
index 8651c3c..4f778c6 100644
--- a/js/comment.js
+++ b/js/comment.js
@@ -71,20 +71,54 @@ if (timeLeft <= 0) {
$('#captcha img').attr('src', aveabspath + 'inc/captcha.php?cd=' + now.getTime());
}
+ // ВАЛИДАЦИЯ ПОЛЕЙ
+
function validate(form) {
- var checks = [
- { field: form.comment_author_name, msg: "Введите имя" },
- { field: form.comment_author_email, msg: "Введите Email" },
- { field: form.comment_text, msg: "Введите текст" }
- ];
- for (var i = 0; i < checks.length; i++) {
- if (checks[i].field && !checks[i].field.value.trim()) {
- alert(checks[i].msg);
- $(checks[i].field).focus();
- return false;
+ var isValid = true;
+
+ // Вспомогательная функция для подсветки
+ function setInvalid($el, show, msg) {
+ if (show) {
+ $el.addClass('is-invalid');
+ if ($el.next('.invalid-feedback').length === 0) {
+ $el.after('
' + msg + '
');
+ }
+ isValid = false;
+ } else {
+ $el.removeClass('is-invalid');
+ $el.next('.invalid-feedback').remove();
}
}
- return true;
+
+ // Проверка Имени
+ setInvalid($(form.comment_author_name), !form.comment_author_name.value.trim(), "Введите ваше имя");
+
+ // Проверка Email
+ setInvalid($(form.comment_author_email), !form.comment_author_email.value.trim(), "Введите корректный Email");
+
+ // Проверка Доп. поля №1 (если оно обязательное)
+ if (typeof REQ_F1 !== 'undefined' && REQ_F1 == '1') {
+ var f1 = $('#in_author_website');
+ setInvalid(f1, !f1.val().trim(), "Заполните: " + NAME_F1);
+ }
+
+ // Проверка Доп. поля №2 (если оно обязательное)
+ if (typeof REQ_F2 !== 'undefined' && REQ_F2 == '1') {
+ var f2 = $('#in_author_city');
+ setInvalid(f2, !f2.val().trim(), "Заполните: " + NAME_F2);
+ }
+
+ // Проверка Текста
+ setInvalid($(form.comment_text), !form.comment_text.value.trim(), "Введите текст комментария");
+
+ if (!isValid) {
+ // Скроллим к первой ошибке
+ $('html, body').animate({
+ scrollTop: $('.is-invalid:first').offset().top - 130
+ }, 300);
+ }
+
+ return isValid;
}
/* --- ДЕЙСТВИЯ (DELETE, LOCK, OPEN/CLOSE, VOTE) --- */
@@ -130,6 +164,12 @@ if (timeLeft <= 0) {
initCommentTimers();
var $doc = $(document);
+ // Убираем красную рамку, когда пользователь начинает исправлять поле
+ $doc.on('input change', '.form-control', function() {
+ $(this).removeClass('is-invalid');
+ $(this).next('.invalid-feedback').fadeOut(200, function() { $(this).remove(); });
+ });
+
// Счетчик: Количество оставшихся символов 1000 для формы создания комментария
$('#in_message').limit(1000, '#charsLeft_new');
@@ -193,6 +233,8 @@ if (timeLeft <= 0) {
$('#user_rating_stars .star-choice').removeClass('bi-star-fill').addClass('bi-star');
$('#image_preview_wrapper').addClass('d-none');
$('#charsLeft_new').text(MAX_CHARS);
+ $('.form-control').removeClass('is-invalid');
+ $('.invalid-feedback').remove();
});
$doc.on('click', '#reset_stars', function(e) {