javascript传递变量

时间:2016-01-11 16:03:38

标签: javascript variables switch-statement

我基本上需要编写一个函数来获取某些变量的值,传递它们并计算订单的总价。我正在使用开关,因为对于所选组件的每个案例,价格会有所不同。因为我远非成为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值。

2 个答案:

答案 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)

通过将价格计算转移到函数中可以解决问题,然后可以在每次更改后调用函数。