简体   繁体   English

Javascript 计算购物车总数

[英]Javascript to calculate shopping cart totals

I currently have code for user to select shirt size, design, style and color.我目前有 select 衬衫尺码、设计、款式和颜色的用户代码。 I am trying to get it to compute price based on user selection.我试图让它根据用户选择计算价格。 If size is s,m,lg,xl the price is $10 but if they select 2x, 3x, the price is now $11, $12 respectively.如果尺寸为 s、m、lg、xl,价格为 10 美元,但如果尺寸为 select 2x、3x,则价格现在分别为 11 美元、12 美元。 The base price is for a t-shirt $10, but if the user selects long sleeve, then the base price is now $15. T 恤的底价为 10 美元,但如果用户选择长袖,则底价现在为 15 美元。 So then sizes 2x and 3x becomes $16, $17.那么尺寸 2x 和 3x 就变成了 16 美元、17 美元。

I also need be able to charge a flat shipping of $5 if order is have sizes from small to XL but charge if $8.00 order contains shirt with size 2xl or 3xl.如果订单的尺码从 S 码到 XL 码,我还需要能够收取 5 美元的固定运费,但如果 8.00 美元的订单包含 2xl 或 3xl 码的衬衫,我将收取运费。

I hope this make sense.我希望这是有道理的。 Any help editing the javascript is greatly appreciated.非常感谢任何编辑 javascript 的帮助。

<SCRIPT language=javascript>
function CalculateOrder(form)
{

if (form.os0.value == "S")
 {
 form.amount.value = 10.00;
 form.item_number.value = "Small";
 if (form.os2.value == "Store Pick-Up"){
 form.shipping.value = "0.00";
 }
 if (form.os2.value == "USPS Priority Mail"){
 form.shipping.value = "8.00";
 }
 }
 
if (form.os0.value == "M")
 {
 form.amount.value = 10.00;
 form.item_number.value = "W-T-Medium";
 if (form.os2.value == "Store Pick-Up"){
 form.shipping.value = "0.00";
 }
 if (form.os2.value == "USPS Priority Mail"){
 form.shipping.value = "8.00";
 }
 }

if (form.os0.value == "LG")
 {
 form.amount.value = 10.00;
 form.item_number.value = "W-T-LG";
 if (form.os2.value == "Store Pick-Up"){
 form.shipping.value = "0.00";
 }
 if (form.os2.value == "USPS Priority Mail"){
 form.shipping.value = "8.00";
 }
 }

if (form.os0.value == "XL")
 {
 form.amount.value = 10.00;
 form.item_number.value = "W-T-XL";
 if (form.os2.value == "Store Pick-Up"){
 form.shipping.value = "0.00";
 }
 if (form.os2.value == "USPS Priority Mail"){
 form.shipping.value = "8.00";
 }
 }
 
if (form.os0.value == "2XL")
 {
 form.amount.value = 11.00;
 form.item_number.value = "W-T-2XL";
 if (form.os2.value == "Store Pick-Up"){
 form.shipping.value = "0.00";
 }
 if (form.os2.value == "USPS Priority Mail"){
 form.shipping.value = "8.00";
 }
 }
 
if (form.os0.value == "3XL")
 {
 form.amount.value = 12.00;
 form.item_number.value = "W-T-3XL";
 if (form.os2.value == "Store Pick-Up"){
 form.shipping.value = "0.00";
 }
 if (form.os2.value == "USPS Priority Mail"){
 form.shipping.value = "8.00";
 }
 }
 
}  
</SCRIPT>

<form target="_self" action="https://www.paypal.com/cgi-bin/webscr" method="post">
             <div align="center">
                <p>
                  <input type="hidden" name="on0" value="Design">
                  Design:&nbsp;&nbsp;
                  <select name="os1">
                    <option value="Design1">Design1</option>
                    <option value="Design2">Design2</option>
                    <option value="Design3">Design3</option>
                    
                  </select>
                  <br><br>
                  <input type="hidden" name="on1" value="Style">
                  Style:&nbsp;&nbsp;
                  <select name="os1">
                    <option value="T-shirt">T-shirt</option>
                    <option value="Long Sleeve">Long Sleeve</option>
                    
                  </select>
                  <br><br>
                  <input type="hidden" name="on2" value="Size">
                  Size:&nbsp;&nbsp;
                  <SELECT name="os0">
                    <OPTION value="S">S</OPTION>
                    <OPTION value="M">M</OPTION>
                    <OPTION value="LG">LG</OPTION>
                    <OPTION value="XL">XL</OPTION>
                    <OPTION value="2XL">2XL</OPTION>
                    <OPTION value="3XL">3XL</OPTION>            
                                        
                  </SELECT>
                  <br><br>
                  <input type="hidden" name="on3" value="Color">
                  Color:&nbsp;&nbsp;
                  <select name="os1">
                    <option value="Black">Black</option>
                    <option value="White">White</option>                    
                  </select>
                  
                  <br>Select Delivery Method:&nbsp;&nbsp;
               <input type="hidden" name="on2" value="Delivery Method">
               <select name="os2">
               <option value="Pick Up" selected>Pick Up</option>
               <option value="USPS Priority Mail">USPS Priority Mail</option>
               </select>

                  <input type="hidden" name="add" value="1">
                  <input type="hidden" name="cmd" value="_cart">
                  <input type="hidden" name="business" value="test@gmail.com">
                  <input type="hidden" name="item_name" value="Widget - T-Shirt">
                  <input type="hidden" name="amount">
                  <input type="hidden" name="item_number">
                  <input type="hidden" name="no_shipping" value="2">
              <input type="hidden" name="shipping">
                  <input type="hidden" name="shipping2">
                  <INPUT onclick=CalculateOrder(this.form) type=image alt="Make payments with PayPal - it's fast, free and secure!" 
                 src="https://www.paypalobjects.com/en_US/i/btn/btn_cart_LG.gif" border=0 name="submit">
                  <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
                  <input type="hidden" name="shopping_url" value="http://abc123.com/store.html">
                  <input type="hidden" name="return" value="http://www.abc123.com/">
                  <input type="hidden" name="currency_code" value="USD">
                  <input type="hidden" name="lc" value="US">
                  <input type="hidden" name="bn" value="PP-ShopCartBF">
                </p>
              </div>
</FORM>

I'll try to clean up your code a little.我会尝试稍微清理一下您的代码。

My changes and notes:我的更改和注释:

  • added ID to form ( payment_form ), so we can search for it with document.getElementById添加 ID 到表单 ( payment_form ),所以我们可以用document.getElementById搜索它
  • you code is checking for form.os2.value == "Store Pick-Up" , but no such value in os2 selector, take a look: <option value="Pick Up" selected> (see? it has different value)你的代码正在检查form.os2.value == "Store Pick-Up" ,但在os2选择器中没有这样的值,看看: <option value="Pick Up" selected> (看到了吗?它有不同的价值)
  • your block of checking shipping is the same for all if's , so I will pu tit in the end你检查shipping的块对于所有if's都是相同的,所以我最后会把 tit
  • I will not pass a form to function, but search for it inside with: const form = document.getElementById('payment_form');我不会将表格传递给 function,而是在内部搜索: const form = document.getElementById('payment_form');
  • amount is not correct name for prices, because amount is how many of this items do you need, it is not the price, but this is just a note. amount不是价格的正确名称,因为amount是你需要多少这个项目,它不是价格,但这只是一个注释。 not important for now现在不重要
  • added IDs for selects, note: ID must be unique为selects添加了ID,注意:ID必须是唯一的
  • now all values updated if any select is updated with: onchange="CalculateOrder()"现在,如果任何 select 更新为: onchange="CalculateOrder()" ,所有值都会更新
  • I've added new function getOption to get values that are set inside the option elements in data-* attributes我添加了新的 function getOption以获取在data-*属性中的option元素内设置的值
  • I've changed function on the button to be onclick="showTest(event)" - this is just for testing.我已将按钮上的 function 更改为onclick="showTest(event)" - 这仅用于测试。 In you real code you do not need any onclick here.在您的真实代码中,您不需要任何onclick

 function getOption(select, dataAttr) { const option = select.options[select.selectedIndex]; if (option) { return option.getAttribute(dataAttr); } return ''; } function CalculateOrder() { const form = document.getElementById('payment_form'); const os0 = document.getElementById('os0'); const os1 = document.getElementById('os1'); const os2 = document.getElementById('os2'); let price = parseFloat(getOption(os1, 'data-base-price')); let item_number = getOption(os0, 'data-item-number'); let shipping = getOption(os2, 'data-price'); if (os0.value == "2XL") { price = price + 1; } else if (os0.value == "3XL") { price = price + 2; } if (os1.value == "Long Sleeve") { shipping = 8; } form.shipping.value = shipping; form.item_number.value = item_number; form.amount.value = price; } CalculateOrder() function showTest(e) { e.preventDefault(); const form = document.getElementById('payment_form'); console.log('item number: ' + form.item_number.value, 'price: ' + form.amount.value, 'shipping: ' + form.shipping.value) }
 <form target="_self" action="https://www.paypal.com/cgi-bin/webscr" method="post" id="payment_form" onchange="CalculateOrder()"> <div align="center"> <p> <input type="hidden" name="on0" value="Design"> Design:&nbsp;&nbsp; <select name="os1"> <option value="Design1">Design1</option> <option value="Design2">Design2</option> <option value="Design3">Design3</option> </select> <br><br> <input type="hidden" name="on1" value="Style"> Style:&nbsp;&nbsp; <select name="os1" id="os1"> <option value="T-shirt" data-base-price="10">T-shirt</option> <option value="Long Sleeve" data-base-price="15">Long Sleeve</option> </select> <br><br> <input type="hidden" name="on2" value="Size"> Size:&nbsp;&nbsp; <SELECT name="os0" id="os0"> <OPTION value="S" data-item-number="Small">S</OPTION> <OPTION value="M" data-item-number="WT-Medium">M</OPTION> <OPTION value="LG" data-item-number="WT-LG">LG</OPTION> <OPTION value="XL" data-item-number="WT-XL">XL</OPTION> <OPTION value="2XL" data-item-number="WT-2XL">2XL</OPTION> <OPTION value="3XL" data-item-number="WT-3XL">3XL</OPTION> </SELECT> <br><br> <input type="hidden" name="on3" value="Color"> Color:&nbsp;&nbsp; <select name="os1"> <option value="Black">Black</option> <option value="White">White</option> </select> <br>Select Delivery Method:&nbsp;&nbsp; <input type="hidden" name="on2" value="Delivery Method"> <select name="os2" id="os2"> <option value="Pick Up" selected data-price="0">Pick Up</option> <option value="USPS Priority Mail" data-price="5">USPS Priority Mail</option> </select> <input type="hidden" name="add" value="1"> <input type="hidden" name="cmd" value="_cart"> <input type="hidden" name="business" value="test@gmail.com"> <input type="hidden" name="item_name" value="Widget - T-Shirt"> <input type="hidden" name="amount"> <input type="hidden" name="item_number"> <input type="hidden" name="no_shipping" value="2"> <input type="hidden" name="shipping"> <input type="hidden" name="shipping2"> <INPUT onclick="showTest(event)" type=image alt="Make payments with PayPal - it's fast, free and secure:" src="https.//www.paypalobjects.com/en_US/i/btn/btn_cart_LG:gif" border=0 name="submit"> <img alt="" border="0" src="https.//www.paypalobjects.com/en_US/i/scr/pixel:gif" width="1" height="1"> <input type="hidden" name="shopping_url" value="http.//abc123.com/store:html"> <input type="hidden" name="return" value="http.//www.abc123.com/"> <input type="hidden" name="currency_code" value="USD"> <input type="hidden" name="lc" value="US"> <input type="hidden" name="bn" value="PP-ShopCartBF"> </p> </div> </FORM>

If you need more explanation, just ask.如果您需要更多解释,请询问。

PS You can test code by clicking "Run code snippet", then select values in selects and press a button. PS 您可以通过单击“运行代码片段”来测试代码,然后选择 select 值并按下按钮。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM