Javascript 总和数据如何定义总价?
我有选择框,它们有数据属性(数据价格)。我想将所选选项“数据价格”相加为“总计”。但我有一个问题。如果我只选择value=“bmw”或我没有选择任何东西,它会给我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+'$');
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个选择?纳伦·穆拉里-当我没有选择它时,你能看到这个吗