parent
bb66bcdacf
commit
de7d2f0bd0
@ -1,89 +1,98 @@ |
|||||||
|
|
||||||
jQuery(document).ready(function($) { |
jQuery(document).ready(function ($) { |
||||||
$('.form-process, .modal__form-sub').on('submit', function (event) { |
$('.form-process, .modal__form-sub').on('submit', function (event) { |
||||||
event.preventDefault(); |
event.preventDefault(); |
||||||
|
|
||||||
let $form = $(this); |
let $form = $(this); |
||||||
let formClass = $form.attr('class'); |
let formClass = $form.attr('class'); |
||||||
let action = $form.attr('action'); |
let action = $form.attr('action'); |
||||||
let formData = $form.serialize(); |
let formData = $form.serialize(); |
||||||
|
|
||||||
|
|
||||||
if (!validateForm(this)) return; |
if (!validateForm(this)) return; |
||||||
|
// TO_DO: переделать на window.ajax_url
|
||||||
$.ajax({ |
$.ajax({ |
||||||
type: 'POST', |
type: 'POST', |
||||||
url: woocommerce_params.ajax_url, |
url: woocommerce_params.ajax_url,
|
||||||
data: { |
data: { |
||||||
action: action, |
action: action, |
||||||
formData: formData |
formData: formData |
||||||
}, |
}, |
||||||
beforeSend: function () { |
beforeSend: function () { |
||||||
// Если нужна специфическая логика перед отправкой
|
// Если нужна специфическая логика перед отправкой
|
||||||
}, |
}, |
||||||
success: function (response) { |
success: function (response) { |
||||||
if ($form.hasClass('form-process')) { |
if ($form.hasClass('form-process')) { |
||||||
closeModals(); |
closeModals(); |
||||||
showModal('mform-success'); |
showModal('mform-success'); |
||||||
|
} |
||||||
|
}, |
||||||
|
complete: function (response) { |
||||||
|
if ($form.hasClass('modal__form-sub')) { |
||||||
|
let email = $form.find('input[name="email"]').val(); |
||||||
|
$('.modal__to-know').removeClass('active'); |
||||||
|
$('#sub-result-email').html(email); |
||||||
|
$('.modal__to-know-submit').addClass('active').css('filter', 'blur(0px)'); |
||||||
|
} |
||||||
} |
} |
||||||
}, |
}); |
||||||
complete: function (response) { |
|
||||||
if ($form.hasClass('modal__form-sub')) { |
|
||||||
let email = $form.find('input[name="email"]').val(); |
|
||||||
$('.modal__to-know').removeClass('active'); |
|
||||||
$('#sub-result-email').html(email); |
|
||||||
$('.modal__to-know-submit').addClass('active').css('filter', 'blur(0px)'); |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
}); |
||||||
}); |
|
||||||
|
|
||||||
}); |
|
||||||
|
|
||||||
const t = window.langData?.translations || {}; |
|
||||||
|
|
||||||
function validateForm(form) { |
|
||||||
clearErrorMessages(form); |
|
||||||
let validated = true; |
|
||||||
|
|
||||||
const nameInput = form.querySelector('input[name="name"]'); |
|
||||||
if (nameInput && !nameInput.value.trim()) { |
|
||||||
showError(nameInput, t.name_required); |
|
||||||
validated = false; |
|
||||||
} |
|
||||||
|
|
||||||
const emailInput = form.querySelector('input[name="email"]'); |
|
||||||
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; |
|
||||||
if (emailInput && !emailPattern.test(emailInput.value.trim())) { |
|
||||||
showError(emailInput, t.email_invalid); |
|
||||||
validated = false; |
|
||||||
} |
|
||||||
|
|
||||||
const phoneInput = form.querySelector('input[name="phone"]'); |
|
||||||
const phonePattern = /^\+?\d{10,15}$/; |
|
||||||
if (phoneInput && !phonePattern.test(phoneInput.value.trim())) { |
|
||||||
showError(phoneInput, t.phone_invalid); |
|
||||||
validated = false; |
|
||||||
} |
|
||||||
|
|
||||||
return validated; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
// Функция для отображения сообщения об ошибке
|
|
||||||
function showError(input, message) { |
|
||||||
const errorMessage = document.createElement('div'); |
|
||||||
errorMessage.className = 'error-message'; |
|
||||||
errorMessage.textContent = message; |
|
||||||
input.insertAdjacentElement('afterend', errorMessage); |
|
||||||
} |
|
||||||
|
|
||||||
// Функция для очистки сообщений об ошибках внутри конкретной формы
|
|
||||||
function clearErrorMessages(form) { |
|
||||||
const errorMessages = form.querySelectorAll('.error-message'); |
|
||||||
errorMessages.forEach(errorMessage => { |
|
||||||
errorMessage.remove(); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
|
/** |
||||||
|
*
|
||||||
|
* Start: Валидация форм (футер, регистрация, подписка "Отсутсвует товар" в блоге и т.д.) |
||||||
|
* Переводы ошибок регистрирубтся в wp-content/themes/cosmopet/global-functions/multilang-functions.php |
||||||
|
*
|
||||||
|
*/ |
||||||
|
const pllTranslationsFromWindow = window.langData?.translations || {}; |
||||||
|
|
||||||
|
function validateForm(form) { |
||||||
|
clearErrorMessages(form); |
||||||
|
let validated = true; |
||||||
|
|
||||||
|
const nameInput = form.querySelector('input[name="name"]'); |
||||||
|
if (nameInput && !nameInput.value.trim()) { |
||||||
|
showError(nameInput, pllTranslationsFromWindow.name_required); |
||||||
|
validated = false; |
||||||
|
} |
||||||
|
|
||||||
|
const emailInput = form.querySelector('input[name="email"]'); |
||||||
|
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; |
||||||
|
if (emailInput && !emailPattern.test(emailInput.value.trim())) { |
||||||
|
showError(emailInput, pllTranslationsFromWindow.email_invalid); |
||||||
|
validated = false; |
||||||
|
} |
||||||
|
|
||||||
|
const phoneInput = form.querySelector('input[name="phone"]'); |
||||||
|
const phonePattern = /^\+?\d{10,15}$/; |
||||||
|
if (phoneInput && !phonePattern.test(phoneInput.value.trim())) { |
||||||
|
showError(phoneInput, pllTranslationsFromWindow.phone_invalid); |
||||||
|
validated = false; |
||||||
|
} |
||||||
|
|
||||||
|
return validated; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
// Функция для отображения сообщения об ошибке
|
||||||
|
function showError(input, message) { |
||||||
|
const errorMessage = document.createElement('div'); |
||||||
|
errorMessage.className = 'error-message'; |
||||||
|
errorMessage.textContent = message; |
||||||
|
input.insertAdjacentElement('afterend', errorMessage); |
||||||
|
} |
||||||
|
|
||||||
|
// Функция для очистки сообщений об ошибках внутри конкретной формы
|
||||||
|
function clearErrorMessages(form) { |
||||||
|
const errorMessages = form.querySelectorAll('.error-message'); |
||||||
|
errorMessages.forEach(errorMessage => { |
||||||
|
errorMessage.remove(); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/* End: Валидация форм (футер, регистрация, подписка "Отсутсвует товар" в блоге и т.д.) */ |
||||||
|
|
||||||
|
|
||||||
|
}); |
Loading…
Reference in new issue