Добрый день, есть форма в модальном окне, в форму подтягиваю данные из бд через ajax, проблема в том, что если вызвать модалку несколько раз подряд, то она не очищается и будет дублировать данные из бд при каждом ее вызове. Как можно это исправить?
Либо в beforeSend добавь, либо перед "подтягиванием" данных добавь сброс формы. Если ajax юзается через jquery, то что-то типа $('form').trigger('reset'); Если вдруг на чистом js, то document.Form.reset();
где в обоих случаях просто замени идентификатор формы $('form') / Form на свое
uwu79, Зачем перед отправкой-то?
Сначала отправили, потом очистили. У формы (HTMLFormElement) есть метод reset(), который прекрасно очищает форму до начальных значений.
Опять же, после отправки может возникнуть ситуация, когда данные не прошли валидацию и сервер сказал - "поправь там немного данные", а вы их уже очистили.
Тогда форму можно очищать либо при открытии модального окна, либо по его закрытию.
Сергей delphinpro, пытался с reset(), но так же не работает
сделал так: var elem = document.getElementById('form');
по очереди проверял в beforeSend, complete, success, но нигде не сработало elem.reset();
Сергей delphinpro, саму суть я понял, но пока что не понимаю как это реализовать, нужно очистить форму при закрытии, но как мне поймать это закрытие формы? она у меня в модалке
со второй модалкой так и не получилось, получается у меня есть таблица с записями, при редактировании какой то из записей открывается модалка с записями, если ее закрыть и открыть другую запись на редактирование, то в модальном окне будут записи уже двух полей, детали полей подтягиваю через ajax, может так будет понятнее в чем может быть проблема((
zmrzjke, да, все как положено, с разными id, думаю что что то накосячил в ajax при получении ответа, просто я прям там добавляю инпуты к форме
думаю так будет понятнее:
uwu79, ты после запроса пытаешься вставить в модальное окно все старые данные из модального окна + новые данные, т.е. твои поля вставляются уже после закрывающего тега form, так как заново впихиваешь ВСЮ форму, а затем новые поля. Плюс при повторном запросе, они начинают нарастать друг на друге. После from отшельнеческий закрывающий тег div. Если прям вот вынь выложь нужно добавлять инпуты после запроса, то хотя бы добавь обертку для вставляемых данных и именно эту обертку и перезаписывай.
<form id="ajax_form" action="" method="post">
<div class="update_block">
//Сюды будет впихиать пришедшие данные
</div>
<div class="modal-footer">
<button type="submit" id ="btn_edit" class="btn btn-primary">Сохранить</button>
</div>
</form>
let af = $("#ajax_form");
af.find('.update_block').html(
'<div class="mb-3">'
+'<label for="recipient-name" class="col-form-label">ФИО:</label>'
+'<input type="text" name="fio" value='+data.fio+' class="form-control " id="recipient-name">'
+'</div>'
);
Но если прям вообще ничего нельзя менять в исходнике, то может быть вот так
let af = $("#ajax_form");
let m = af.find('.modal-footer');
m.children().not('button').remove();
m.prepend(
'<div class="mb-3">'
+'<label for="recipient-name" class="col-form-label">ФИО:</label>'
+'<input type="text" name="fio" value='+data.fio+' class="form-control " id="recipient-name">'
+'</div>'
);
zmrzjke, спасибо большое, работает, вроде понял, но не совсем), можете пожалуйста объяснить по подробнее как это работает? почему сейчас они перезаписываются, а раньше просто нарастали друг на друге?
uwu79, потому что ты в модальное $("#ajax_form") вставляешь это же модальное целиком в секущем состоянии $("#ajax_form").html( $("#ajax_form").html() ) т.е. выходит так что модальное окно перезаписывается в себя же, а потом к нему присобачиваются input поля.
Во второй итерации, в модальное окно опять себя перезаписывает, но в нем уже имеются поля после первой итерации. И на второй раз добавляются уже по новой поля, при этом сохраняются старые. И результат будет уже вот такой