用JS模擬購物車

需求:用Javascript模擬購物車頁面,要求上面是商品,下面是購物車。按添加可以將上面的物品添加到下面的購物車中。

購物車中有加和減按鈕,可以加減商品的數量。按刪除可以將商品刪除。

最後,每單件商品有價格合計,購物車中所有商品有總合計。


cart.html

<!DOCTYPE html>
<html>
  <head>
    <title>購物車</title>
    <meta charset="utf-8" />
    <style type="text/css">
      h1 {
        text-align:center;
      }
      table {
        margin:0 auto;
        width:60%;
        border:2px solid #aaa;
        border-collapse:collapse;
      }
      table th, table td {
        border:2px solid #aaa;
        padding:5px;
      }
      th {
        background-color:#eee;
      }
    </style>
    <script type="text/javascript" src="js/cart.js" >
    </script>
  </head>
  <body>
    <h1>真划算</h1>
    <table>
      <tr>
        <th>商品</th>
        <th>單價(元)</th>
        <th>顏色</th>
        <th>庫存</th>
        <th>好評率</th>
        <th>操作</th>
      </tr>   
      <tr>
        <td>羅技M185鼠標</td>
        <td>80</td>
        <td>黑色</td>
        <td>893</td>
        <td>98%</td>
        <td align="center">
          <input type="button" value="加入購物車" οnclick="add_shoppingcart(this);"/>
        </td>
      </tr>
      <tr>
        <td>微軟X470鍵盤</td>
        <td>150</td>
        <td>黑色</td>
        <td>9028</td>
        <td>96%</td>
        <td align="center">
          <input type="button" value="加入購物車" οnclick="add_shoppingcart(this);"/>
        </td>
      </tr>
      <tr>
        <td>洛克iphone6手機殼</td>
        <td>60</td>
        <td>透明</td>
        <td>672</td>
        <td>99%</td>
        <td align="center">
          <input type="button" value="加入購物車" οnclick="add_shoppingcart(this);"/>
        </td>
      </tr>
      <tr>
        <td>藍牙耳機</td>
        <td>100</td>
        <td>藍色</td>
        <td>8937</td>
        <td>95%</td>
        <td align="center">
          <input type="button" value="加入購物車" οnclick="add_shoppingcart(this);"/>
        </td>
      </tr>
      <tr>
        <td>金士頓U盤</td>
        <td>70</td>
        <td>紅色</td>
        <td>482</td>
        <td>100%</td>
        <td align="center">
          <input type="button" value="加入購物車" οnclick="add_shoppingcart(this);"/>
        </td>
      </tr>
    </table>
  
    <h1>購物車</h1>
    <table>
      <thead>
        <tr>
          <th>商品</th>
          <th>單價(元)</th>
          <th>數量</th>
          <th>金額(元)</th>
          <th>刪除</th>
        </tr>
      </thead>
      <tbody id="goods">
      </tbody>
     <tfoot>
        <tr>
          <td colspan="3" align="right">總計</td>
          <td id="total"></td>
          <td></td>
        </tr>
      </tfoot>
    </table>    
  </body>
</html>

cart.js

var all = 0;			//用全局變量記錄總合計價格。

function add_shoppingcart(btn) {			//增加到購物車
	var tr = btn.parentNode.parentNode;
	var info = tr.children;
	var item = document.createElement("tr");
	var name = info[0].innerHTML;
	var price = parseInt(info[1].innerHTML);
	item.innerHTML = 				//創建購物車項
		'<td>'+name+'</td>'+
		'<td>'+price+'</td>'+
		'<td align="center">'+
			'<input type="button" value="-" οnclick="reduce(this);"/> '+	//要加空格的原因:因爲字符串用"+"連接,不會將換行符當作空格,所以和原生空格不對稱,所以手動加一個空格。
			'<input type="text" size="3" readonly value="1"/>'+
			'<input type="button" value="+" οnclick="increase(this);"/> '+	//函數要傳入this,方便操作。
		'</td>'+
		'<td>'+price+'</td>'+
		'<td align="center"><input type="button" value="x" οnclick="remove_shoppingcart(this)"/></td>';
				//做完這一步,就可以將cart.html中購物車的第一行刪除了
	var cart = document.getElementById("goods");
	cart.appendChild(item);
	tr.remove();
	
	all += price;		//改變全局總價
	changeTotal();				//刷新總價
}

function remove_shoppingcart(btn) {
	var tr = btn.parentNode.parentNode;
	var children = tr.children;
	var price = parseInt(children[3].innerHTML);
	all -= price;
	changeTotal();					//改變合計金額
	
	tr.innerHTML = "";				//將祖節點置空
}

function reduce(btn) {			//減少商品數量
	var amount = btn.nextElementSibling.value;
	if(amount==0){
		return;				//若商品等於0則退出		
	}
	amount--;
	btn.nextElementSibling.value = amount;		//更新商品數量
	
	var value = parseInt(btn.parentNode.previousElementSibling.innerHTML);	//獲取商品單價
	btn.parentNode.nextElementSibling.innerHTML = value*amount;		//更新商品總價
	all -= value;		//更新全局總價。
	changeTotal();		//刷新總價
	
}

function increase(btn) {		//增加商品數量
	var amount = btn.previousElementSibling.value;
	amount++;
	btn.previousElementSibling.value = amount;		//更新商品數量
	
	var value = parseInt(btn.parentNode.previousElementSibling.innerHTML);
	btn.parentNode.nextElementSibling.innerHTML = value*amount;
	
	all += value;		//更新全局總價
	changeTotal();		//刷新總價
}

function changeTotal() {		//更新total函數,在每次改變購物車時使用。
	var total = document.getElementById("total");
	total.innerHTML = all;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章