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