全局JS变量在login函数内无法获取输入框值,求解决方法
问题原因与解决方案
错误原因
你在页面初始化阶段就执行了const email = loginemail.value和const password = loginpassword.value,此时用户还未在输入框中输入任何内容,这两个变量存储的是输入框的初始空值(或默认值)。后续用户输入内容后,这两个常量不会自动同步输入框的最新值,因为它们的赋值操作只执行了一次。
另外,const声明的变量是只读常量,一旦赋值就无法修改,即便你想后续更新也做不到。
修复方案
方案1:在登录函数内实时获取输入值(推荐)
将获取输入框值的逻辑移到login()函数内部,每次调用函数时才读取输入框的最新内容:
function login() { const email = loginemail.value; const password = loginpassword.value; alert(email); signInWithEmailAndPassword(auth, email, password) .then((userCredential) => { const user = userCredential.user; // ... 后续登录成功逻辑 }) .catch((error) => { const errorMessagelogin = error.message; createUserWithEmailAndPassword(auth, email, password) .then((userCredential) => { const user = userCredential.user; // ... 后续注册成功逻辑 }) .catch((error2) => { const errorMessageregister = error2.message; pagebody.innerHTML = `${errorMessagelogin}<br /><br />${errorMessageregister}`; }); }); }
方案2:使用可修改的全局变量(不推荐,尽量减少全局变量)
如果确实需要全局存储输入值,将const改为let,并在login()函数内重新赋值更新:
let email = ''; let password = ''; function login() { email = loginemail.value; password = loginpassword.value; alert(email); // 后续登录/注册逻辑不变 }
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

