如何将单选框(radio)数据推送至Firebase数据库?变量未定义求助
问题解决:pickedTerm未定义及表单数据存入Firebase
你的问题核心是变量作用域问题:pickedTerm是在for循环内部的if代码块里用let声明的,这个变量的作用范围仅限该代码块,出了这个块就无法被访问,所以后续创建propertyData时会提示未定义。
下面提供两种可行的修改方案:
方案一:调整变量作用域
把pickedTerm的声明移到for循环外部,让整个点击事件回调函数都能访问到它:
const inputTerm = document.getElementsByName("terms") propertyBtn.addEventListener("click", function () { let pickedTerm = ""; // 将变量声明提升到外部作用域 for (let i = 0; i < inputTerm.length; i++){ if(inputTerm[i].checked){ pickedTerm = inputTerm[i].value; // 直接赋值,无需重复声明 } } let propertyData = { terms: pickedTerm, title: inputTitle.value, location: inputLocation.value, }; push(addedPropertyInDB, propertyData); });
方案二:简化选中项获取逻辑
不用循环遍历,直接通过querySelector精准选中被勾选的单选框,代码更简洁:
const inputTerm = document.getElementsByName("terms") propertyBtn.addEventListener("click", function () { // 直接获取选中的单选框,若未选中则设为空字符串 const pickedTerm = document.querySelector('input[name="terms"]:checked')?.value || ""; let propertyData = { terms: pickedTerm, title: inputTitle.value, location: inputLocation.value, }; push(addedPropertyInDB, propertyData); });
修改后pickedTerm就能正常被访问,propertyData可以完整推送到Firebase数据库。
内容的提问来源于stack exchange,提问作者Samuel Bankole
相关产品推荐
相关产品推荐

