当页面完全加载时试图获取页面的元素,但是我要么未定义,要么为null。为什么?

时间:2019-04-21 16:33:01

标签: javascript firebase-authentication

我已经进行了两天的工作,但我仍然无法弄清楚为什么有时我的元素有时返回null或其他时候返回undefined却从不返回属性本身。我已经在各自的HTML文件中设置了它们的ID,但仍然会得到null或未定义。

我尝试使用setTimeout(),但是由于我要重定向到新页面而无法正常工作。我尝试在具有DOMContentLoaded的文档上使用事件侦听器。我什至尝试过window.onload

var userEmailDisplay;
var newPaswordInput;
var confNewPaswordInput;
var submitNewPasswordBtn;

const urlParams = getAllUrlParams(window.location.href);
const actionCode = urlParams.oobCode;

window.onload = () => {
  var doc = document;
  switch (urlParams.mode) {
    case 'resetPassword':
      handleResetPassword(actionCode);
      break;
    case 'recoverEmail':
      handleRecoverEmail(actionCode);
      break;
    case 'verifyEmail':
      handleVerifyEmail(actionCode);
      break;
  }

  // get new password elements
  /*   if (window.location.href.indexOf("new-password") > -1) {
      userEmailDisplay = doc.getElementById('account-email-new-pswd');
      newPaswordInput = doc.getElementById('new-password-input');
      confNewPaswordInput = doc.getElementById('conf-new-password-input');
      submitNewPasswordBtn = doc.getElementById('update-pswd-sub-btn');
    } */

}

function handleResetPassword(actionCode) {
  // Verify the password reset code is valid.
  auth.verifyPasswordResetCode(actionCode).then(function (email) {
    window.location.href = "https://couch-potato-880f0.firebaseapp.com/email/new-password.html";
    console.log("code verified");

    confirmThePswdReset(actionCode, email);
  }).catch(function (error) {
    console.error(error);
  });
}

function confirmThePswdReset(actionCode, email) {
  window.onload = () => {
    userEmailDisplay = document.getElementById('account-email-new-pswd');
    newPaswordInput = document.getElementById('new-password-input');
    confNewPaswordInput = document.getElementById('conf-new-password-input');
    submitNewPasswordBtn = document.getElementById('update-pswd-sub-btn');
    console.log(submitNewPasswordBtn + ' + ' + userEmailDisplay);
    if (submitNewPasswordBtn && userEmailDisplay) {
      submitNewPasswordBtn.addEventListener('click', function (e) {
        e.preventDefault();
        const accountEmail = email;
        console.log('submit btn clicked');
        const newPassword = newPaswordInput.value;
        const confNewPasswordValue = confNewPaswordInput.value;
        userEmailDisplay.innerHTML = `Email: ${accountEmail}`;
        if (newPassword != confNewPasswordValue) {
          alert('The new passwords must match!');
          return;
        }
        console.log(newPassword);
        // Save the new password.
        auth.confirmPasswordReset(actionCode, newPassword).then(function (resp) {
          // Password reset has been confirmed and new password updated.
          alert("All good");
          window.location.replace('/email/confirm-password-reset.html');
        }).catch(function (error) {
          console.error(error);
        });
      });
    }
  }
}

我希望当我单击新密码页面上的“提交”按钮时,会弹出一个警告框,提示一切正常,并且密码已重置,但从未发生过。该代码仅上至if语句,该语句检查SubmitNewPasswordBtn和userEmailDisplay是否存在并且不为null。我知道这是因为我从没收到过输出日志,指出单击了提交按钮。有时,我什至没有得到过输出来检查SubmitNewPasswordBtn和userEmailDisplay是否存在并具有值。

0 个答案:

没有答案