javascript 如何将输入类型:'radio'推送到firebase数据库

sqxo8psd  于 12个月前  发布在  Java
关注(0)|答案(3)|浏览(113)

我循环通过它的“名称”收音机,以获得选定的“术语"的值,然后使用一个按钮添加数据到数据库与其他值。

const inputTerm = document.getElementsByName("terms")

propertyBtn.addEventListener("click", function () {

    for (let  i = 0; i < inputTerm.length; i++){
        if(inputTerm[i].checked){
            let pickedTerm = inputTerm[i].value
        }
    }
    
    
    let propertyData = {
        terms: pickedTerm,
        title: inputTitle.value,
        location: inputLocation.value,
      };

  push(addedPropertyInDB, propertyData);
  
  
});

字符串
使用此代码pickedTerm未定义,我希望所有propertyData作为一个推到firebase数据库

qacovj5a

qacovj5a1#

你需要在循环外声明pickedTerm。

const inputTerm = document.getElementsByName("terms");
let pickedTerm; // Declare pickedTerm outside the loop

propertyBtn.addEventListener("click", function () {
    for (let i = 0; i < inputTerm.length; i++){
        if (inputTerm[i].checked) {
            pickedTerm = inputTerm[i].value; 
            break;
        }
    }

        let propertyData = {
            terms: pickedTerm,
            title: inputTitle.value,
            location: inputLocation.value,
        };
        push(addedPropertyInDB, propertyData);

});

字符串

stszievb

stszievb2#

这是因为变量pickedTerm的作用域只在if语句中有效。

JavaScript中的作用域

作用域是当前执行的上下文,其中值和表达式是“可见的”或可以被引用。如果变量或表达式不在当前作用域中,则不能使用。

JavaScript有以下几种作用域:

  • 全局作用域:所有在脚本模式下运行的代码的默认作用域。
  • 模块作用域:以模块模式运行的代码的作用域。
  • 函数作用域:用函数创建的作用域。

阅读更多关于Scope
对于您当前的脚本,您需要在访问pickedTerm变量的作用域中的何处声明该变量。
就是这样。编码快乐!!

const inputTerm = document.getElementsByName("terms")

propertyBtn.addEventListener("click", function () {
    let pickedTerm = null;
    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);
  
  
});

字符串

xqnpmsa8

xqnpmsa83#

经过几次尝试和错误。
我创建了一个单独的循环函数,它可以按照我想要的方式工作。

const inputTerm = document.getElementsByName("terms");
    
    function getSelectedValue(inputs) {
        for (let i = 0; i < inputs.length; i++) {
          if (inputs[i].checked) {
            return inputs[i].value;
          }
        }
        return null;
      }
    
    propertyBtn.addEventListener("click", function () {
    
        const pickedTerm = getSelectedValue(inputTerm);
    
      
    
    
      let propertyData = {
        terms: pickedTerm,
        title: inputTitle.value,
        location: inputLocation.value,
      };
    
      push(addedPropertyInDB, propertyData);
      console.log(propertyData);
    
    });

字符串

相关问题