我尝试添加价格以查找总数,但console.log
打印NaN
或只重复该数字:
这是我的JavaScript代码:
var qt_articles = new Array();
var tab_prix = new Array();
function print_nb_article(article, nb){
$('#top_ten_nb_'+article).text(nb);
var prix = $('#top_ten_nb_'+article+'_prix').val();
var prix_tt = $('.prix_'+article).text(prix*nb);
if (prix_tt > 0) tab_prix.push(prix_tt);
for(i=0; i<tab_prix.length; i++){
prix_global += parseFloat(tab_prix[i]);
console.log(prix_global);
}
}
$('#plus_veste').click(function() {
veste++;
print_nb_article('veste', veste);
return false;
});
我的HTML:
<span id="prix_global">0</span>
问题出在哪里?
答案 0 :(得分:4)
因为您没有初始化prix_global
。添加
var prix_global = 0;
在某些浏览器中,由于id(但从未对span的解析内容进行处理),它将初始化为元素。如果您尝试添加跨度的初始值,请执行
var prix_global = parseFloat(document.getElementById('prix_global').innerHTML);
... computations...
document.getElementById('prix_global').innerHTML = prix_global;
更一般地说,请注意变量的初始化(另请参阅veste
)及其解析(您prix*nb
幸运)。
答案 1 :(得分:1)
我看到几个问题,用评论突出显示:
var qt_articles = new Array();
var tab_prix = new Array();
function print_nb_article(article, nb) {
$('#top_ten_nb_' + article).text(nb);
var prix = $('#top_ten_nb_' + article + '_prix').val();
// Note 1: Below, `prix_tt` will be a jQuery object, not a string or number.
// You might want to set `prix_tt`, *then* set it as the text of the element.
var prix_tt = $('.prix_' + article).text(prix * nb);
// Note 2: So this comparison will compare `"[object Object]"` to `"0"`,
// and get `false`. This'll get fixed if you fix the above.
if (prix_tt > 0) tab_prix.push(prix_tt);
for (i = 0; i < tab_prix.length; i++) {
// Note 3: If the push *had* happened, here you'd be retrieving
// the object and trying to parse `"[object Object]"` as a number.
// This would also get fixed by the above.
// Note 4: You're not setting `prix_global` to `0` before the loop,
// so either it's `undefined` or you're going to get the wrong total
prix_global += parseFloat(tab_prix[i]);
console.log(prix_global);
}
// Note 5: Do you ever do anything with `prix_global`??
}
$('#plus_veste').click(function () {
veste++;
print_nb_article('veste', veste);
return false;
});
另请注意,您不会在任何地方声明i
(您用于循环的变量),因此您几乎肯定会成为The Horror of Implicit Globals的牺牲品。这也适用于veste
,除非它被宣布在你没有展示的地方(可能还有其他地方)。
所以要解决它:
可能会将注释1下的代码更改为:
var prix_tt = prix * nb;
$('.prix_' + article).text(prix_tt);
在您需要的最里面的范围内声明变量。
在循环之前将prix_global
设置为0
。
在计算完毕后对prix_global
执行某些操作。
我会做的其他事情:
摆脱全局变量。你几乎肯定不需要它们。
使用[]
而不是new Array()
来创建数组。