инструкция «else» продолжает срабатывать при обновлении имени пользователя Firebase?

# #javascript #firebase #firebase-authentication

Вопрос:

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

Я пытаюсь реализовать следующий рабочий процесс: пользователь нажимает «обновить профиль», вводит свое новое имя пользователя, нажимает кнопку «отправить», форма сбрасывается, и модальное закрытие.

Первое обновление имени пользователя работает именно так, как я хочу. Последующие попытки обновления, похоже, запускают мое утверждение «еще», которое должно обнаруживаться, если пользователь оставил поле нового имени пользователя пустым, и вызывает предупреждение окна.

Вот код для всего моего модального профиля обновления:

 const updateProfileModal = (currentUser) => {

    // DOM Elements
    const modal = document.querySelector(".modal");
    const openModalButton = document.querySelector("#update-profile-btn");
    const updateButton = document.querySelector("#update");
    const updateProfileForm = document.querySelector(".profile-update-form");
    const profileNameField = document.querySelector("#profile_name");
    const closeModalButton = document.querySelector("#close-modal");

    // Open "update profile" modal when clicked from dropdown menu
    openModalButton.addEventListener("click", (e) => {
        e.preventDefault();

        // Hide the dropdown menu after opening update profile modal
        document.querySelector(".dropdown-content").classList.toggle("show");

        // Show user's email address and current username in placeholders
        document.querySelector("#profile_email").placeholder = currentUser.email;
        document.querySelector("#profile_name").placeholder = currentUser.displayName;

        // If the modal doesn't have the CSS "show" class:
        if (!modal.classList.contains("show")) {

            // Toggle that class into the modal
            modal.classList.toggle("show");

            // Upon clicking on "update" button inside modal:
            updateButton.addEventListener("click", (e) => {
                e.preventDefault();

                // Get value of new displayName
                const newName = profileNameField.value;

                // Update displayName.
                if (newName !== "") {
                    updateUsername(newName)
                    updateProfileForm.reset();
                    modal.classList.toggle("show")
                    firebase.auth().currentUser.reload();
                } else {
                    window.alert("Must choose a new name to update")
                }
            })
        }
    })

    // Close profile updating modal upon clicking the "x"
    closeModalButton.addEventListener("click", () => {
        modal.classList.toggle("show");
    })
}
 

Вот функция updateUsername, которую она использует:

 // Update user's display name
const updateUsername = (newName) => {
    auth.currentUser.updateProfile({
        displayName: newName
    }).then(() => {
        // Once the name has been updated, append it to the user dropdown menu
        updateDisplayNameInDOM(firebase.auth().currentUser)
    });
}
 

Комментарии:

1. Я не могу найти то, что updateDisplayNameInDOM делает. Также не могли бы вы поделиться своим HTML/CSS, чтобы было легче воспроизвести проблему?

2. Вот функция updateDisplayNameInDOM: // Показать отображаемое имя пользователя внутри DOM const updateDisplayNameInDOM = (текущий пользователь) => { документ. Селектор запросов(«#имя_пользователя»).innerHTML = текущий пользователь.имя_пользователя; }

Ответ №1:

Вы можете попытаться удалить updateProfileForm.reset(); его из своего кода. Похоже, это приводит к сбою последующего обновления.