Javascript 总和数据如何定义总价?

Javascript 总和数据如何定义总价?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有选择框,它们有数据属性(数据价格)。我想将所选选项“数据价格”相加为“总计”。但我有一个问题。如果我只选择value=“bmw”或我没有选择任何东西,它会给我NaN$ $('#标记,#系列')。在('change',function()上{ 变量$selected=$(“#标记,#系列”)。子项(“:selected”); var总和=0; $selected.each(函数(){ 总和+=$(此).data('price'); }); $('#total').html(sum+'$');

我有选择框,它们有数据属性(数据价格)。我想将所选选项“数据价格”相加为“总计”。但我有一个问题。如果我只选择value=“bmw”或我没有选择任何东西,它会给我
NaN$

$('#标记,#系列')。在('change',function()上{
变量$selected=$(“#标记,#系列”)。子项(“:selected”);
var总和=0;
$selected.each(函数(){
总和+=$(此).data('price');
});
$('#total').html(sum+'$');
});

--
宝马
奥迪
--
3系列
5系列

您必须解析被视为字符串的数据

 $selected.each(function() {
     var data = $(this).data('price');
     if(data != undefined){
           sum += parseFloat(data);
     }
 });

您必须解析被视为字符串的数据

 $selected.each(function() {
     var data = $(this).data('price');
     if(data != undefined){
           sum += parseFloat(data);
     }
 });

如果返回值是未定义的,请使用回退值
0

使用线路

sum += $(this).data('price') || 0;
注意:您还需要在开始时运行此验证函数,以确保在
change()
事件开始之前计算结果

函数验证(){
变量$selected=$(“#标记,#系列”)。子项(“:selected”);
var总和=0;
$selected.each(函数(){
总和+=$(此).data('price')| | 0;
});
$('#total').html(sum==0?'':sum+'$);
}
验证();
$('#mark,#series')。on('change',function(){
验证();
});

--
宝马
奥迪
--
3系列
5系列

如果返回值
未定义,请使用回退值
0

使用线路

sum += $(this).data('price') || 0;
注意:您还需要在开始时运行此验证函数,以确保在
change()
事件开始之前计算结果

函数验证(){
变量$selected=$(“#标记,#系列”)。子项(“:selected”);
var总和=0;
$selected.each(函数(){
总和+=$(此).data('price')| | 0;
});
$('#total').html(sum==0?'':sum+'$);
}
验证();
$('#mark,#series')。on('change',function(){
验证();
});

--
宝马
奥迪
--
3系列
5系列

仅选择一个选项时,另一个选项的所选选项没有“数据价格”属性:

<option value="">--</option>   <!-- data-price === "undefined" -->

--
宝马
奥迪
--
3系列
5系列

仅选择一个选项时,另一个选项的所选选项没有“数据价格”属性:

<option value="">--</option>   <!-- data-price === "undefined" -->

--
宝马
奥迪
--
3系列
5系列

此代码将解决您的问题:

    $('#mark, #series').on('change', function() {
  var $selected = $('#mark, #series').children(":selected");
  var sum = 0;

  $selected.each(function() {
    var price = $(this).data('price');

    if(price){
        sum += $(this).data('price');
    }
  });

  $('#total').html(sum + '$');
});

如果将
price
变量记录到forEach循环中,可以看到它返回一个
整数,然后返回一个
未定义的
。这应该是固定的!:)

此代码将修复您的问题:

    $('#mark, #series').on('change', function() {
  var $selected = $('#mark, #series').children(":selected");
  var sum = 0;

  $selected.each(function() {
    var price = $(this).data('price');

    if(price){
        sum += $(this).data('price');
    }
  });

  $('#total').html(sum + '$');
});

如果将
price
变量记录到forEach循环中,可以看到它返回一个
整数,然后返回一个
未定义的
。这应该是固定的!:)

当您更改一个下拉列表时,比如Make,
$selected
将包含两个元素:

bmw
--

现在计算总和时,将两个值
200
和空字符串作为字符串相加。您应该尝试使用
parseInt(“string”,10)
将所有值解析为整数(注意10参数指定要使用的基数,最好是显式的,请参见此处)

此外,正如这里的其他答案所述,您应该始终尝试默认为整数值(对于空字符串)。因此,您的代码现在可以如下所示:

$('#标记,#系列')。在('change',function()上{
变量$selected=$(“#标记,#系列”)。子项(“:selected”);
var总和=0;
$selected.each(函数(){
var optionPrice=parseInt($(this).data('price'),10)| | 0;
总和+=期权价格;
});
$('#total').html((sum)?(sum+'$):'';
});

--
宝马
奥迪
--
3系列
5系列

当您更改一个下拉列表时,比如Make,
$selected
将包含两个元素:

bmw
--

现在计算总和时,将两个值
200
和空字符串作为字符串相加。您应该尝试使用
parseInt(“string”,10)
将所有值解析为整数(注意10参数指定要使用的基数,最好是显式的,请参见此处)

此外,正如这里的其他答案所述,您应该始终尝试默认为整数值(对于空字符串)。因此,您的代码现在可以如下所示:

$('#标记,#系列')。在('change',function()上{
变量$selected=$(“#标记,#系列”)。子项(“:selected”);
var总和=0;
$selected.each(函数(){
var optionPrice=parseInt($(this).data('price'),10)| | 0;
总和+=期权价格;
});
$('#total').html((sum)?(sum+'$):'';
});

--
宝马
奥迪
--
3系列
5系列

$(this).data('price')
将返回字符串。您必须转换它。我没有低估您的回答。
$(此)。数据('price')
将返回字符串。你必须转换它。我没有低估你的回答。这不是问题。结果仍然是NaN。这不是问题所在。结果仍然是NaN。当我没有选择它时,它会给我0$,如何隐藏这个。如果我没有选择“标记”不显示任何内容
if(sum==0){$('#total').hide()}否则{$('#total').show()}
当我没有选择时,它会给我0$,如何隐藏它。如果我没有选择“标记”不显示任何内容
if(sum==0){$('#total').hide()}否则{$('#total').show()}
当我没有选择时,它会给我0$,如何隐藏它。如果我没有选择“标记”显示nothing@Geo1313我使用了三元if来检查这种情况,请查看我的更新答案!如果我加上其他选择,我怎么能加上3个选择?纳伦·穆拉里-当我没有选择它时,你能看到这个吗