我基本上需要编写一个函数来获取某些变量的值,传递它们并计算订单的总价。我正在使用开关,因为对于所选组件的每个案例,价格会有所不同。因为我远非成为JavaScript专家而且可能搞砸了代码。
这是我写的全部js:
(function(RamPrice, CPUPrice, HDDPrice, additionalHardDrivePrice, flashDrivePrice, additionalFlashDrivePrice) {
var ramTrans = document.forms['ramMemory'].elements['ram'];
for (var i = 0, len = ramTrans.length; i < len; i++) {
ramTrans[i].onclick = function() {
var choosenRam = this.value;
switch (choosenRam) {
case 'GOODRAM DDR4 8GB (2133MHz)':
var RamPrice = 219.00;
document.getElementById('ramMem').innerHTML = 'Pamięć RAM: ' + this.value;
break;
case 'Kingston DDR4 SODIMM 8GB (2133MHz)':
var RamPrice = 229.00;
document.getElementById('ramMem').innerHTML = 'Pamięć RAM: ' + this.value;
break;
case 'Crucial DDR4 8GB (2133MHz)':
var RamPrice = 229.00;
document.getElementById('ramMem').innerHTML = 'Pamięć RAM: ' + this.value;
break;
case 'HyperX Impact DDR4 8GB (2400MHz)':
var RamPrice = 249.00;
document.getElementById('ramMem').innerHTML = 'Pamięć RAM: ' + this.value;
break;
case 'HyperX IMPACT BLACK DDR3 8GB (1600MHz)':
var RamPrice = 189.00;
document.getElementById('ramMem').innerHTML = 'Pamięć RAM: ' + this.value;
break;
default:
var RamPrice = 0;
}
};
ramTrans[i].onchange = function() {
var choosenRam = this.value;
switch (choosenRam) {
case 'GOODRAM DDR4 8GB (2133MHz)':
var RamPrice = 219.00;
document.getElementById('ramMem').innerHTML = 'Pamięć RAM: ' + this.value;
break;
case 'Kingston DDR4 SODIMM 8GB (2133MHz)':
var RamPrice = 229.00;
document.getElementById('ramMem').innerHTML = 'Pamięć RAM: ' + this.value;
break;
case 'Crucial DDR4 8GB (2133MHz)':
var RamPrice = 229.00;
document.getElementById('ramMem').innerHTML = 'Pamięć RAM: ' + this.value;
break;
case 'HyperX Impact DDR4 8GB (2400MHz)':
var RamPrice = 249.00;
document.getElementById('ramMem').innerHTML = 'Pamięć RAM: ' + this.value;
break;
case 'HyperX IMPACT BLACK DDR3 8GB (1600MHz)':
var RamPrice = 189.00;
document.getElementById('ramMem').innerHTML = 'Pamięć RAM: ' + this.value;
break;
default:
var RamPrice = 0;
}
};
}
// disable submission of all forms on this page
for (var i = 0, len = document.forms.length; i < len; i++) {
document.forms[i].onsubmit = function() {
return false;
};
}
var finalPrice = RamPrice + CPUPrice + HDDPrice + additionalHardDrivePrice + flashDrivePrice + additionalFlashDrivePrice;
document.getElementById('price').innerHTML = 'Cena zamówienia: ' + finalPrice + 'PLN';
}());
看起来最后一部分搞砸了,因为如果我用手指设置变量,它会正确显示所有内容。因此,我认为传递变量可能是一个问题。
提前致谢。
编辑。据我所知,我使这个JavaScript代码占用更少的空间,并希望使其更具可读性。我也发现了一个问题。变量(在这种情况下)RamPrice仅在切换后正确显示。每当我尝试使用'for'语句中的RamPrice时,变量将被取消分配或返回NaN值。
答案 0 :(得分:0)
您可以尝试制作地图/对象/哈希:
var prices = {
'GOODRAM DDR4 8GB (2133MHz)' : 219,
'Kingston DDR4 SODIMM 8GB (2133MHz)': 229,
// etc
};
document.getElementById('ramMem').innerHTML = 'Pamięć RAM: ' + prices[choosenRam];
然后你可以摆脱所有开关:)
此外,如果您想要返回一个值,则必须在函数末尾使用return RamPrice;
(不确定这是否是您想要的那样)。
答案 1 :(得分:-1)
通过将价格计算转移到函数中可以解决问题,然后可以在每次更改后调用函数。