Я хотел бы проверить form
с помощью AJAX-запроса к серверу, а затем заменить form
html в веб-браузере на form
html с сервера, потому что это было бы легко реализовать в теории. Тем не менее, это кошмар, потому что событие change
запускается без дальнейшего взаимодействия пользователя после первого взаимодействия, которое вызвало первое событие изменения. Следовательно, происходит бесконечный цикл запросов AJAX к серверу.
html form
находится внутри div
с классами «контейнер mb-4». Это код JS -
var _cont = $('.container.mb-4')
var _form = $('.custom-form')
function ajax_validation(form) {
form.on('change', 'input, select, textarea', function() {
form_data = form.serialize()
$.ajax({
url: "/form/6/",
type: "POST",
data: form_data,
success: function(data) {
if(!(data['success'])) {
_cont.empty()
_cont.append(data['form_html'])
form = _cont.find('form')
ajax_validation(form)
}
},
error: function () {
form.find('.error-message').show()
}
});
})
}
ajax_validation(_form)
Я предполагаю, что событие изменения инициировано, поскольку сервер возвращает поле form
input
с другим токеном csrf в качестве значения для предыдущего поля input
- все остальные поля одинаковы. Поэтому очевидным решением было бы сохранить тот же токен csrf. Но я хочу понять, почему код JS не работает. Я думал, что уничтожение form
уничтожит связанное с ним событие change
. Поэтому затрудняюсь объяснить этот бесконечный цикл. Как мне изменить это, чтобы я мог просто поменять форму и не запускать другое событие изменения, пока пользователь действительно что-то не изменит?