Как обновить содержимое модального элемента Materialize CSS?

#javascript #forms #modal-dialog #materialize

#javascript #формы #модальный диалог #материализовать

Вопрос:

Справочная информация: я показываю список на веб-сайте. В каждой строке списка есть кнопка редактирования, которая открывает модальный элемент Materialize CSS. Внутри модального элемента находится HTML-форма, которая извлекает текущие значения из этой конкретной строки в списке, которые можно редактировать с помощью новых значений.

Проблема: после отправки изменений в модальной форме модальная форма сохранит значения этой конкретной строки, даже при выборе другой строки. Этого не происходит, когда модальная форма не отправлена.

Временное решение: я перезагружаю всю страницу при отправке модального элемента. Таким образом, модальное содержимое также обновляется, но пользовательский интерфейс страдает, поскольку пользователю всегда нужно ждать перезагрузки страницы.

Вопрос: Есть ли способ перезагрузить или обновить содержимое модального элемента или модальной формы без перезагрузки всей веб-страницы? В идеале, модальный элемент обновит и загрузит правильные значения для каждой строки после отправки редактирования. Я открыт для других идей / решений.

Код:

  auth.onAuthStateChanged(user => {
        if (user) {
        const editForm = document.querySelector('#edit-form');
      
        editForm.addEventListener('submit', (e) => {
          e.preventDefault();
      
          db.collection('users').doc(user.uid).collection('items').doc(editForm.itemID.value).collection('transactions').doc(editForm.transactionID.value).update({
            amount_edit: (parseFloat(editForm.amountEdit.value)*-1).toFixed(2),
            name_edit: editForm.nameEdit.value,
          }).then(() => {
            // close the edit-modal
            const modaledit = document.querySelector('#modal-edit');
            M.Modal.getInstance(modaledit).close();
            editForm.reset();
            location.reload()
          }).catch(err => {
            console.log(err.message);
          });
        })
            } else {
            }
          });
  

Ответ №1:

Немного опоздал на вечеринку. Вы могли бы сбросить, а затем отправить событие фокусировки для каждого поля. editForm.reset()
editForm.querySelectorAll(`[name]`).forEach(i => i.dispatchEvent(new Event('focus')));