我的多选选择只给出了输出作为我的第一个选择。我正在将数据发送到firebase,只有第一个选择会在那里反映出来。例如,如果我在firebase中选择(能源,医疗保健,房地产),它只显示能源。
下面是我的HTML代码:
<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文件中将数据发送到实时数据库的代码片段
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;
})
}发布于 2021-05-20 20:13:33
firebase数据库是由RealTime对象组成的,当您从输入中获取值时,请确保它们以正确的格式返回,在这里,您似乎是在更新一个名为interested_sector的现有键,并向其添加值health, energy etc。由于实时数据库接受JSON,所以您发送的必须是正确的JSON,这是您的代码破坏值并可能获取第一个数字的地方,您需要遍历所有获取的值,并决定以什么格式存储它们?
例如:
{
interested_sector: {
1: 'health',
2: 'energy'
}
}或
{
interested_sector: "health, energy"
}正如您所看到的,这两个都是有效的选项,但是您需要先解析这些值,然后才能发送它们进行更新。
所以在测试你的代码后,发现interested_sector值改变了你选择的新值,它替换了旧值,这就是为什么当你更新firebase数据库中的字段时,它只显示最新的值,
例如:如果你选择“能源”并点击按钮来保存信息,它将节省“能源”。
然后你点击‘材料’并点击按钮保存信息,FireBase值被改变并替换旧的值,保存信息的函数也改变了interested_sector值。
解决方案是添加一个本地变量,该变量保持值不变,并不断向它们追加新值,并使用分隔符,如',‘或';’。‘’,‘’,‘interested_sector’,‘
所以上面的正确代码应该是这样的:
<!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对象
https://stackoverflow.com/questions/67617165
复制相似问题