javascript - 如何使用 Javascript 来记录多项选择的分数

标签 javascript jquery

多年来我一直在尝试解决这个问题,但似乎就是无法集中精力。

这是我的 HTML:

<select>
    <option value="0">Select</option>
    <option value="-5">Answer 1</option>
    <option value="5">Answer 2</option>
</select>

<select>
    <option value="0">Select</option>
    <option value="-5">Answer 1</option>
    <option value="5">Answer 2</option>
</select>

<p class="total">0</p>

这是我的 JS:

var score = 0;
var scoreNew = 0;
$('select').change(function() {
    scoreNew = parseInt($(this).val()) + parseInt(score);
    $('.total').text(scoreNew);
})

发生了什么:

  • 如果您选择答案 1,则得分为 -5
  • 如果您选择答案 2,则得分为 5(到目前为止还不错)
  • 但如果您随后转到 Q2 并选择 Ans1,分数将变为 -5(而现在应该为 0)

我以为我用以下代码修复了它(但我没有):

var score = 0;
var scoreNew = 0;
$('select').change(function() {
    scoreNew += Number($(this).val());
    $('.total').text(scoreNew);
})

现在发生了什么:

  • 如果我选择 Ans1,我会得到 -5(到目前为止一切顺利)
  • 但是如果我选择 Ans2,我会得到 0(它应该是 5)

我觉得我几乎需要这两种方法的组合,但不太明白。

我希望一切都有意义。如果有人可以提供帮助,我们将不胜感激。谢谢。

最佳答案

由于您在更改处理程序的范围之外声明了 total,因此它将保留其最后分配的值,因此任何进一步的更改都将应用于更新后的总计,而不是原始的 0 .

如果您需要在每个选择上更新,您应该在本地声明变量并使用选择元素的所有当前值重新计算:

$('select').change(function() {
  var total = 0;
  $('select').each(function() {
    total += Number($(this).val());
  });
  $('.total').text(total);
})

fiddle :https://jsfiddle.net/zgj6sq05/

关于javascript - 如何使用 Javascript 来记录多项选择的分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37083175/

相关文章:

javascript - D3 DateTime 解析器考虑时区

javascript - 验证隐藏的输入字段

javascript - 使用 javascript 滚动时如何保持类事件?

JavaScript 运行时错误 : "object doesn' t support property or method"in Internet Explorer

JQuery 选择删除其中类!= "dgItem"

Javascript正则表达式提取标题和iframe

javascript - 样式化组件 v5.3 createGlobalStyles 不起作用

javascript - 防止 MVC 中的多次提交

javascript - noUiSlider 链接错误

javascript - 如果用户不接受 JS 确认消息,如何检查先前选择的单选按钮?