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) { |
||||
event.preventDefault(); |
||||
|
||||
let $form = $(this); |
||||
let formClass = $form.attr('class'); |
||||
let action = $form.attr('action'); |
||||
let formData = $form.serialize(); |
||||
|
||||
|
||||
if (!validateForm(this)) return; |
||||
|
||||
$.ajax({ |
||||
type: 'POST', |
||||
url: woocommerce_params.ajax_url, |
||||
data: { |
||||
action: action, |
||||
formData: formData |
||||
}, |
||||
beforeSend: function () { |
||||
// Если нужна специфическая логика перед отправкой
|
||||
}, |
||||
success: function (response) { |
||||
if ($form.hasClass('form-process')) { |
||||
closeModals(); |
||||
showModal('mform-success'); |
||||
event.preventDefault(); |
||||
|
||||
let $form = $(this); |
||||
let formClass = $form.attr('class'); |
||||
let action = $form.attr('action'); |
||||
let formData = $form.serialize(); |
||||
|
||||
|
||||
if (!validateForm(this)) return; |
||||
// TO_DO: переделать на window.ajax_url
|
||||
$.ajax({ |
||||
type: 'POST', |
||||
url: woocommerce_params.ajax_url,
|
||||
data: { |
||||
action: action, |
||||
formData: formData |
||||
}, |
||||
beforeSend: function () { |
||||
// Если нужна специфическая логика перед отправкой
|
||||
}, |
||||
success: function (response) { |
||||
if ($form.hasClass('form-process')) { |
||||
closeModals(); |
||||
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; |
||||
/** |
||||
*
|
||||
* Start: Валидация форм (футер, регистрация, подписка "Отсутсвует товар" в блоге и т.д.) |
||||
* Переводы ошибок регистрирубтся в wp-content/themes/cosmopet/global-functions/multilang-functions.php |
||||
*
|
||||
*/ |
||||
const pllTranslationsFromWindow = window.langData?.translations || {}; |
||||
|
||||
const nameInput = form.querySelector('input[name="name"]'); |
||||
if (nameInput && !nameInput.value.trim()) { |
||||
showError(nameInput, t.name_required); |
||||
validated = false; |
||||
} |
||||
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, t.email_invalid); |
||||
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; |
||||
} |
||||
|
||||
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; |
||||
} |
||||
|
||||
return validated; |
||||
} |
||||
|
||||
// Функция для отображения сообщения об ошибке
|
||||
function showError(input, message) { |
||||
const errorMessage = document.createElement('div'); |
||||
errorMessage.className = 'error-message'; |
||||
errorMessage.textContent = message; |
||||
input.insertAdjacentElement('afterend', errorMessage); |
||||
} |
||||
|
||||
// Функция для отображения сообщения об ошибке
|
||||
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(); |
||||
}); |
||||
} |
||||
|
||||
// Функция для очистки сообщений об ошибках внутри конкретной формы
|
||||
function clearErrorMessages(form) { |
||||
const errorMessages = form.querySelectorAll('.error-message'); |
||||
errorMessages.forEach(errorMessage => { |
||||
errorMessage.remove(); |
||||
}); |
||||
} |
||||
/* End: Валидация форм (футер, регистрация, подписка "Отсутсвует товар" в блоге и т.д.) */ |
||||
|
||||
|
||||
}); |
Loading…
Reference in new issue