【问题标题】:Sum and Multiply output is wrongSum and Multiply 输出错误
【发布时间】:2019-12-05 21:48:03
【问题描述】:

我有 4 个字段需要总结,我用 $('select :selected').each(function() { 总结但不知何故,下面的代码输出 99 而它需要输出 72。

// Count for ShowerCoins
$(document).ready(function() {
$('select.countForShowerCoins').on('change', function() {
  var sum = 0;

   $('select :selected').each(function() {
       sum += Number($(this).val() * 3) * $('select[name=howManyNights]').val();
   });

$(".result").html(sum);
  });

});

sum 是“4 个输入字段,每个字段的数值为 2”,是 8 的总和。然后乘以 3 即为 24,然后将其乘以夜晚的数量,即 3。24 * 3 = 72。但不知何故,我得到了 99 的输出。

有人知道这是怎么回事吗,我错过了什么吗?我在$('select[name=howManyNights]').val(); 上使用了parseInt(,但这并没有改变任何东西。我注意到这是因为sum,因为当我用静态数字替换它时,计算有效。

但我不知道如何解决。

【问题讨论】:

  • 如果您可以创建代码的 jsfiddle/stackblitz 那就太好了。
  • 更好:使用Stack Snippets cc @PranavRamachandran
  • 请注意,$(this).val() 返回一个字符串。您应该使用Number($(this).val()),而不是Number($(this).val() * 3)。两种方式都没有关系;我们真正需要的是minimal reproducible example,这样我们就可以重现这种情况。

标签: jquery sum calculation multiplication


【解决方案1】:

我认为您可能有操作顺序问题。根据您的描述,您希望 sum 输入 THEN x 3 x nights$('select[name=howManyNights]') 也是 select,因此它会包含在 $(select :selected).each() 中,这可能就是您得到意外输出的原因。

我冒昧地猜测您的其余代码是什么样的,但希望这会有所帮助:

$('select.countForShowerCoins').on('change', function() {
  let sum = 0

  $('select.countForShowerCoins').each(function() { sum += Number(this.value); })

  $(".result").html(sum * 3 * Number($('select[name="howManyNights"]').val()));
});

https://jsfiddle.net/t2jdsk0q/1/ 这具有您给定输入的预期输出。

旁注: Number($(this).val() * 3) 应该是 Number($(this).val()) * 3

幸运的是,javascript 将字符串强制转换为数字以进行除法/乘法/减法,但不用于加法。

2 * '3' = 62 + '3' = '23'

【讨论】:

  • 是的,这行得通!感谢您的时间。所以我做错的是使用每一个选择,这对我来说很愚蠢。我注意到sum += Number($(this).val()sum += Number(this.value); 相同,并且我注意到当我从howManyNights.val 中删除Number() 时,它给出了相同的输出。无论哪种方式都有效。就像你说的那样。如果我不使用 parseInt() 我会得到2 + '3' = '23'。谢谢你
【解决方案2】:

您为每个输入字段乘以 Nights,因此结果不正确。请试试这个:

$(document).ready(function() {
$('select.countForShowerCoins').on('change', function() {
  var sum = 0;

   $('select :selected').each(function() {
       sum += Number($(this).val() * 3);
   });

   if (sum > 0) {
       sum *= $('select[name=howManyNights]').val();
   }

$(".result").html(sum);
  });

});

【讨论】:

  • 您好,感谢您的宝贵时间。输出仍然是 99
  • 因为我错误地使用了$('select :selected').each(function() {,但是代码看起来不错,谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-09-06
  • 2021-03-22
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 2022-11-18
  • 2018-03-07
相关资源
最近更新 更多