首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多选发送到firebase时只给出第一个选择

多选发送到firebase时只给出第一个选择
EN

Stack Overflow用户
提问于 2021-05-20 16:57:48
回答 1查看 38关注 0票数 0

我的多选选择只给出了输出作为我的第一个选择。我正在将数据发送到firebase,只有第一个选择会在那里反映出来。例如,如果我在firebase中选择(能源,医疗保健,房地产),它只显示能源。

下面是我的HTML代码:

代码语言:javascript
复制
<select name="Sector" value="sector" id="interested_sector" class="selectpicker" multiple="multiple" data-live-search="true">
   <option value="">Sector</option>
   <option value="energy">Energy</option>
   <option value="materials">Materials</option>
   <option value="consumer discretionary">Consumer Discretionary</option>
   <option value="consumer staples">Consumer staples</option>
   <option value="health care">Health Care</option>
   <option value="financials">Financials</option>
   <option value="information technology">Information Technology</option>
   <option value="telecommunication services">Telecommunication services</option>
   <option value="utilites">Utilites</option>
   <option value="real estate">Real Estate</option>
</select>

下面是我的.js文件中将数据发送到实时数据库的代码片段

代码语言:javascript
复制
var interested_sector = getInputVal('interested_sector')

 function getInputVal(id){
    return document.getElementById(id).value;
}

function saveUserInfo( interested_sector){
    firebase.database().ref('User_info/'+id).update({
        interested_sector: interested_sector,
    }).then(() => {
      window.location = //it goes to a different html page;
    })
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-20 20:13:33

firebase数据库是由RealTime对象组成的,当您从输入中获取值时,请确保它们以正确的格式返回,在这里,您似乎是在更新一个名为interested_sector的现有键,并向其添加值health, energy etc。由于实时数据库接受JSON,所以您发送的必须是正确的JSON,这是您的代码破坏值并可能获取第一个数字的地方,您需要遍历所有获取的值,并决定以什么格式存储它们?

例如:

代码语言:javascript
复制
{
   interested_sector: {
                         1: 'health',
                         2: 'energy'
                      }
}

代码语言:javascript
复制
{
   interested_sector: "health, energy"
}

正如您所看到的,这两个都是有效的选项,但是您需要先解析这些值,然后才能发送它们进行更新。

所以在测试你的代码后,发现interested_sector值改变了你选择的新值,它替换了旧值,这就是为什么当你更新firebase数据库中的字段时,它只显示最新的值,

例如:如果你选择“能源”并点击按钮来保存信息,它将节省“能源”。

然后你点击‘材料’并点击按钮保存信息,FireBase值被改变并替换旧的值,保存信息的函数也改变了interested_sector值。

解决方案是添加一个本地变量,该变量保持值不变,并不断向它们追加新值,并使用分隔符,如',‘或';’。‘’,‘’,‘interested_sector’,‘

所以上面的正确代码应该是这样的:

代码语言:javascript
复制
<!DOCTYPE html>
<html>

<body>
  <select name="Sector" value="sector" id="interested_sector" class="selectpicker" multiple="multiple" data-live-search="true">
    <option value="sector">Sector</option>
    <option value="energy">Energy</option>
    <option value="materials">Materials</option>
    <option value="consumer discretionary">Consumer Discretionary</option>
    <option value="consumer staples">Consumer staples</option>
    <option value="health care">Health Care</option>
    <option value="financials">Financials</option>
    <option value="information technology">Information Technology</option>
    <option value="telecommunication services">Telecommunication services</option>
    <option value="utilites">Utilites</option>
    <option value="real estate">Real Estate</option>
  </select>
  <button onclick="getCalled()">Get Called</button>
  <script>
    var final_val = "";

    function getInputVal(id) {
      return document.getElementById(id).value;
    }

    function getCalled() {
      var interested_sector = getInputVal('interested_sector');
      final_val += interested_sector + ', ';
      console.log(final_val);
      alert(final_val);
    }
  </script>
</body>

</html>

仅供参考:firebase的更新函数不会附加到旧值,它只更改您想要更改的特定字段,并保持所有其他字段不变。与ref()不同,.set()函数会完全重写整个json对象

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67617165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档