需求:用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;
}