0

支払い処理業者に渡す金額に到達する前にユーザー入力を処理する単純なカートを作成しています。機能するコードがありますが、それが合計を計算する最も効率的な方法であるかどうかはわかりません。第二に、3 つのカテゴリを選択した場合にパーセンテージ ディスカウントの可能性を追加したいと思います。もともとIF文でいろいろチェックする方法があったのですが、それでは効率が悪く、未解決の問題もありました。既存のコードにパーセンテージ ディスカウントを適用するにはどうすればよいですか (4 つのアイテム カテゴリのうち 3 つが >0 の場合)。

  var subtotal = 0;
  var veu4 = 0;
  var veo4 = 0;
  var vres = 0;
  var vcvl = 0;
  var vedb = 0;

  function update_price(pin) {
  quantity = parseFloat(pin.value);

  var callname = pin.name;

    if (callname == "item1"){
      price = quantity * 50;
      subtotal -= vcvl * 50;
      vcvl = quantity;
    }
    else if (callname == "item2"){
      price = quantity * 50;
      subtotal -= vres * 50;
      vres = quantity;
    }
    else if (callname == "item3"){
      price = quantity * 99;
      subtotal -= veu4 * 99;
      veu4 = quantity;
    }
    else if (callname == "item4"){
      price = quantity * 129;
      subtotal -= veo4 * 129;
      veo4 = quantity;
    }
    else{
      //commented out irrelevant
    }


 subtotal += price;
 passtotal = document.getElementById("ftotal"); 
 total = document.getElementById("ptotal");
 total.innerHTML = subtotal;
 passtotal.value = subtotal;
 passtotal.innerHTML = subtotal;   
}

}

あなたの助けは大歓迎です!

4

1 に答える 1

1

これを行うには多くの方法がありますが、これはもう少し DRY になります。

var items = {
  item1: 50,
  item2: 50,
  item3: 99,
  item4: 129
};

var cart = {};

function update_price(pin) {
  quantity = parseFloat(pin.value);

  var callname = pin.name;

  // Get the total for this item with quantity
  price = quantity * items[callname];

  // Update quantity in cart
  cart[callname] = {quantity: quantity, subtotal: price};  

  passtotal = document.getElementById("ftotal"); 
  total = document.getElementById("ptotal");
  total.innerHTML = price;
  passtotal.value = price;
  passtotal.innerHTML = price;
}

合計/小計の概念は奇妙だと思います。合計/小計は、価格 * 数量の最後の計算に常に等しくなるようです。生成されたコードが間違っている可能性があります。そのため、私のものも少し間違っています。これを修正するには、合計をカート内のすべての小計と等しくします。

このデータをサーバーに渡す場合は、購入するアイテムと数量を渡す必要があります。サーバー側では、小計と合計を再計算する必要があります。これを支援するために、カート変数を追加しました。このデータをシリアル化し、サーバー処理に送信するだけです。 実際にユーザーに課金するときは、ftotal または ptotal の値を正確に解釈しないでください。

于 2012-10-23T19:12:43.600 に答える