【发布时间】:2020-04-16 07:01:01
【问题描述】:
我正在尝试制作几个按钮,就像投票系统一样。用户可以按下 5 个不同的按钮,每个按钮的投票数存储在 Firestore 中。按下按钮后,该值应该显示在每个按钮上,这就是我的问题所在。我编写了一个代码来增加值并显示投票数,但它不适用于用户按下的按钮。例如,如果我按下按钮 1,所有其他按钮都会显示正确的票数,但在按下的按钮上,即使有几票,也只会显示一票。这也发生在所有其他按钮上,并且问题仅发生在按下的按钮上。如果它太长,我很抱歉,但我相对于 javascript。这是我的代码:
<ul>
<li class="circleProgressVote">
<button class="btn white black-text voteBtn" id="btn1" onclick="vote1(); disableButton();"> Svært dårlig </button>
</li>
<li class="circleProgressVote">
<button class="btn white black-text voteBtn" id="btn2" onclick="vote2(); disableButton();"> Dårlig </button>
</li>
<li class="circleProgressVote">
<button class="btn white black-text voteBtn" id="btn3" onclick="vote3(); disableButton();"> Usikker </button>
</li>
<li class="circleProgressVote">
<button class="btn white black-text voteBtn" id="btn4" onclick="vote4(); disableButton();"> Bra </button>
</li>
<li class="circleProgressVote">
<button class="btn white black-text voteBtn" id="btn5" onclick="vote5(); disableButton();"> Svært bra </button>
</li>
</ul>
function vote1() {
console.log('ans1');
const valg1 = db.collection('spørsmål').doc('BdTGAbGw33HSr9GZoJYA');
valg1.update({ 'valg1': increment });
db.collection('spørsmål').get().then((snapshot) => {
snapshot.docs.forEach(doc => {
hentSvar1(doc);
});
});
function hentSvar1(doc) {
let div1 = document.createElement('div');
let votes1 = document.createElement('span');
let span1 = document.createElement('span');
div1.setAttribute('data-id', doc.id);
votes1.textContent = doc.data().valg1;
span1.textContent = ' stemmer';
div1.appendChild(votes1);
div1.appendChild(span1);
let div2 = document.createElement('div');
let votes2 = document.createElement('span');
let span2 = document.createElement('span');
div2.setAttribute('data-id', doc.id);
votes2.textContent = doc.data().valg2;
span2.textContent = ' stemmer';
div2.appendChild(votes2);
div2.appendChild(span2);
let div3 = document.createElement('div');
let votes3 = document.createElement('span');
let span3 = document.createElement('span');
div3.setAttribute('data-id', doc.id);
votes3.textContent = doc.data().valg3;
span3.textContent = ' stemmer';
div3.appendChild(votes3);
div3.appendChild(span3);
let div4 = document.createElement('div');
let votes4 = document.createElement('span');
let span4 = document.createElement('span');
div4.setAttribute('data-id', doc.id);
votes4.textContent = doc.data().valg4;
span4.textContent = ' stemmer';
div4.appendChild(votes4);
div4.appendChild(span4);
let div5 = document.createElement('div');
let votes5 = document.createElement('span');
let span5 = document.createElement('span');
div5.setAttribute('data-id', doc.id);
votes5.textContent = doc.data().valg5;
span5.textContent = 'stemmer';
div5.appendChild(votes5);
div5.appendChild(span5);
svar1.appendChild(div1);
svar2.appendChild(div2);
svar3.appendChild(div3);
svar4.appendChild(div4);
svar5.appendChild(div5);
document.getElementById('btn1').style.border = '2px solid red';
};
};
所有的vote1()-vote5()函数都是一样的,最后一行没有改变所选按钮的边框,顶部的递增函数递增firestore中的五个不同字段,里面的函数称为“hentSvar1” , "hentSvar2" 等等。 我尝试在增量代码之后使用 then() 并将其放在其余代码中以查看是否有帮助,但这不起作用。我也知道显示值的函数太长且效率低下,但我对 javascript 还是比较陌生。如果有人需要,这是 Firestore 中的数据库: valg1 - valg5 是连接到每个按钮的那些字段,是一个更新和显示的字段。 如果这太长了,我很抱歉,但我不知道是什么问题。如果你们中的任何人可以帮助我,我将不胜感激。 谢谢。
【问题讨论】:
标签: javascript firebase google-cloud-firestore