Автоматическая очистка полностью пустых форм товаров перед валидацией заказа
This commit is contained in:
@@ -845,43 +845,57 @@
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Добавляем логирование для кнопки сохранения
|
||||
// Автоматическая очистка полностью пустых форм товаров перед отправкой
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const orderForm = document.getElementById('order-form');
|
||||
const submitButtons = orderForm.querySelectorAll('button[type="submit"]');
|
||||
|
||||
console.log('[FORM DEBUG] Форма найдена:', orderForm);
|
||||
console.log('[FORM DEBUG] Кнопки submit найдены:', submitButtons.length);
|
||||
if (!orderForm) return;
|
||||
|
||||
submitButtons.forEach((btn, index) => {
|
||||
console.log('[FORM DEBUG] Кнопка', index, ':', btn);
|
||||
console.log('[FORM DEBUG] Кнопка disabled?', btn.disabled);
|
||||
console.log('[FORM DEBUG] Кнопка type:', btn.type);
|
||||
console.log('[FORM DEBUG] Текст кнопки:', btn.textContent.trim());
|
||||
// Обработчик submit - очищаем пустые строки перед валидацией
|
||||
orderForm.addEventListener('submit', function(e) {
|
||||
// Находим все формы товаров
|
||||
const itemForms = document.querySelectorAll('.order-item-form');
|
||||
|
||||
// Проверяем disabled при каждом клике
|
||||
btn.addEventListener('click', function(e) {
|
||||
console.log('[FORM DEBUG] Клик по кнопке!');
|
||||
console.log('[FORM DEBUG] Event:', e);
|
||||
console.log('[FORM DEBUG] Кнопка disabled на момент клика?', this.disabled);
|
||||
console.log('[FORM DEBUG] DefaultPrevented?', e.defaultPrevented);
|
||||
console.log('[FORM DEBUG] Форма валидна?', orderForm.checkValidity());
|
||||
|
||||
// Проверяем, не блокирует ли что-то отправку
|
||||
if (this.disabled) {
|
||||
console.error('[FORM DEBUG] ОШИБКА: Кнопка заблокирована!');
|
||||
e.preventDefault();
|
||||
return false;
|
||||
itemForms.forEach(form => {
|
||||
// Пропускаем уже удалённые формы
|
||||
if (form.classList.contains('deleted')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Находим поля
|
||||
const productField = form.querySelector('[name$="-product"]');
|
||||
const kitField = form.querySelector('[name$="-product_kit"]');
|
||||
const quantityField = form.querySelector('[name$="-quantity"]');
|
||||
const priceField = form.querySelector('[name$="-price"]');
|
||||
const idField = form.querySelector('[name$="-id"]');
|
||||
|
||||
// Проверяем значения (пустота = нет значения или значение пустое)
|
||||
const hasProduct = productField && productField.value && productField.value.trim();
|
||||
const hasKit = kitField && kitField.value && kitField.value.trim();
|
||||
const hasQuantity = quantityField && quantityField.value && quantityField.value.trim();
|
||||
const hasPrice = priceField && priceField.value && priceField.value.trim();
|
||||
|
||||
// Если ВСЁ пусто — это мусорная строка, удаляем
|
||||
const isCompletelyEmpty = !hasProduct && !hasKit && !hasQuantity && !hasPrice;
|
||||
|
||||
if (isCompletelyEmpty) {
|
||||
// Если есть ID (сохранённая позиция) — помечаем на удаление
|
||||
if (idField && idField.value) {
|
||||
const deleteCheckbox = form.querySelector('input[name$="-DELETE"]');
|
||||
if (deleteCheckbox) {
|
||||
deleteCheckbox.checked = true;
|
||||
}
|
||||
form.classList.add('deleted');
|
||||
form.style.display = 'none';
|
||||
} else {
|
||||
// Новая несохранённая форма — просто удаляем из DOM
|
||||
form.remove();
|
||||
}
|
||||
}
|
||||
}, true); // Используем capturing phase
|
||||
});
|
||||
|
||||
// Слушаем событие submit формы
|
||||
orderForm.addEventListener('submit', function(e) {
|
||||
console.log('[FORM DEBUG] Событие submit формы!');
|
||||
console.log('[FORM DEBUG] Event:', e);
|
||||
console.log('[FORM DEBUG] DefaultPrevented?', e.defaultPrevented);
|
||||
}, true);
|
||||
// Всё остальное идёт на валидацию Django как есть
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user