Исправить: кнопка сохранения заказа не работала (вложенная форма)
ПРОБЛЕМА: После предыдущего коммита кнопка сохранения заказа перестала работать. Клик на кнопку не приводил к отправке формы - ноль реакции. ПРИЧИНА: Вложенная форма удаления платежа внутри основной формы order-form. Вложенные формы недопустимы в HTML и браузер неправильно обрабатывает submit-события. РЕШЕНИЕ: Заменил вложенную форму на JavaScript обработчик: - Кнопка удаления теперь type=button (не submit) - Добавлены data-атрибуты: payment-id, payment-name, payment-amount - JavaScript создает временную форму для POST-запроса с delete_payment_id - Форма отправляется программно через form.submit() ИЗМЕНЕНИЯ: - Заменена форма на button для удаления платежей - Добавлен JavaScript обработчик .delete-existing-payment-btn - Подтверждение удаления с именем и суммой платежа РЕЗУЛЬТАТ: ✅ Кнопка сохранения заказа работает ✅ Удаление существующих платежей работает ✅ Нет вложенных форм (валидный HTML)
This commit is contained in:
@@ -628,13 +628,13 @@
|
||||
<span class="text-muted">{{ payment.notes|default:"—" }}</span>
|
||||
</div>
|
||||
<div class="col-md-1 text-end">
|
||||
<form method="post" style="display: inline;" onsubmit="return confirm('Удалить этот платеж?');">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="delete_payment_id" value="{{ payment.id }}">
|
||||
<button type="submit" class="btn btn-outline-danger btn-sm" title="Удалить платеж">
|
||||
<button type="button" class="btn btn-outline-danger btn-sm delete-existing-payment-btn"
|
||||
data-payment-id="{{ payment.id }}"
|
||||
data-payment-name="{{ payment.payment_method.name }}"
|
||||
data-payment-amount="{{ payment.amount|floatformat:2 }}"
|
||||
title="Удалить платеж">
|
||||
<i class="bi bi-trash"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -845,6 +845,46 @@
|
||||
}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// Обработчик удаления существующих платежей
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const deleteButtons = document.querySelectorAll('.delete-existing-payment-btn');
|
||||
|
||||
deleteButtons.forEach(button => {
|
||||
button.addEventListener('click', function() {
|
||||
const paymentId = this.dataset.paymentId;
|
||||
const paymentName = this.dataset.paymentName;
|
||||
const paymentAmount = this.dataset.paymentAmount;
|
||||
|
||||
if (!confirm(`Удалить платеж "${paymentName}" на сумму ${paymentAmount} руб.?`)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Создаем скрытую форму для отправки
|
||||
const form = document.createElement('form');
|
||||
form.method = 'POST';
|
||||
form.action = window.location.href;
|
||||
|
||||
const csrfToken = document.querySelector('[name=csrfmiddlewaretoken]').value;
|
||||
const csrfInput = document.createElement('input');
|
||||
csrfInput.type = 'hidden';
|
||||
csrfInput.name = 'csrfmiddlewaretoken';
|
||||
csrfInput.value = csrfToken;
|
||||
form.appendChild(csrfInput);
|
||||
|
||||
const paymentIdInput = document.createElement('input');
|
||||
paymentIdInput.type = 'hidden';
|
||||
paymentIdInput.name = 'delete_payment_id';
|
||||
paymentIdInput.value = paymentId;
|
||||
form.appendChild(paymentIdInput);
|
||||
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="card mb-3">
|
||||
|
||||
Reference in New Issue
Block a user