/*計(jì)算總價(jià)格*/
川匯網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),川匯網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為川匯上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的川匯做網(wǎng)站的公司定做!
var totalPrice=0;
for(var a=1;a3;a++){
var quantity=document.getElementById("quantity"+a).value;
var price=document.getElementById("price"+a).value;
var smallTotal=quantity*price;
totalPrice=totalPrice+smallTotal;
}
var total=document.getElementById("total");
total.innerHTML=totalPrice;
}
/script
script type="text/javascript"
function initialize()
{
var totalPrice=0;
for(var a=1;a3;a++){
var quantity=document.getElementById("quantity"+a).value;
var price=document.getElementById("price"+a).value;
var smallTotal=quantity*price;
totalPrice=totalPrice+smallTotal;
/*alert(smallTotal);*/
var smallT=document.getElementById("smallTotal"+a);
smallT.innerHTML=smallTotal;
}
/*取出購(gòu)物車的所有商品的價(jià)格總和*/
var total=document.getElementById("total");
total.innerHTML=totalPrice;
}
/script
style type="text/css"
#imgtest {
position: absolute;
top: 100px;
left: 400px;
z-index: 1;
}
table {
left: 100px;
font-size: 20px;
}
/style
/head
body onload="initialize()"
div id="imgtest"/div
br /
br /
table border="1" style="text-align: center;" align="center"
thead style="height: 50"
td style="WIDTH: 300px"
商品名稱
/td
td style="WIDTH: 60px"
圖片
/td
td style="WIDTH: 170px"
數(shù)量
/td
td style="WIDTH: 170px"
價(jià)格
/td
td style="WIDTH: 250px"
小計(jì)
/td
/thead
tbody
tr
td class="name"商品1/td
td class="image"
img src="1.jpg" width="40px" height="40px" id="image1" /
/td
td class="quantity"
input id="quantity1" value="1" onblur="total(1);" /
/td
td class="price"
input type="hidden" id="price1" value="20" /
20
/td
td class="total"
span id="smallTotal1"/span 元
/td
/tr
tr
td class="name"商品2/td
td class="image"
img src="1.jpg" width="40px" height="40px" id="image1" /
/td
td class="quantity"
input id="quantity2" value="2" onblur="total(2);" /
/td
td class="price"
input type="hidden" id="price2" value="30" /
30
/td
td class="total"
span id="smallTotal2"/span 元
/td
/tr
tr
td colspan="4" class="cart_total"
br
/td
td
span class="red"總計(jì):/spanspan id="total"/span 元
/td
/tr
/tbody
/table
/body
/html
關(guān)于只有最后一個(gè)文本框能觸發(fā)checknum方法的問(wèn)題:
其實(shí)這里有個(gè)邏輯錯(cuò)誤,主要是%=i%中的i是多少的問(wèn)題。從你貼出來(lái)的代碼看,你是不是連JS代碼也循環(huán)輸出了吧,也就是有幾條購(gòu)物信息,就會(huì)生成幾個(gè)checknum方法,在JS里,同函數(shù)名的方法如果多次定義,則只有最后一個(gè)定義的方法有效果,那最后一個(gè)checknum方法里的%=i%實(shí)際就只指代最后一個(gè)文本框了。結(jié)果就是只有最后一個(gè)文本框有效果。
其實(shí)樓主只需要循環(huán)輸出表格,JS代碼只用一個(gè)就行了,只要在文本框觸發(fā)JS動(dòng)作時(shí),把%i%作為參數(shù)傳進(jìn)JS方法就行了,例如,你可以這么寫:
...
td width="58" height="30"input name="num%=i%" size="5" type="text" value="%=goodsitem.number%" onBlur="checknum(this.form,%=i%)"/td
...
把JS方法放到循環(huán)外面,這么寫:
function checknum(myform,i){
var inp = myform['num'+i];
if(isNaN(inp.value) || inp.value.indexOf('.')!=-1){
alert("請(qǐng)不要輸入非法字符!");inp.focus();return;}//判斷是否為數(shù)字值
if(inp.value%=leave%){alert("請(qǐng)輸入小于現(xiàn)有庫(kù)存 ("+%=leave%+") 的數(shù)量!");inp.focus();return;}
if(inp.value==0){
alert("請(qǐng)輸入大于1的整數(shù)!");inp.focus();return;}
if(inp.value==""){
alert("請(qǐng)輸入修改的數(shù)量!");inp.focus();return;}
myform.submit();
}
關(guān)于數(shù)字修改后觸發(fā)checknum方法的問(wèn)題:
樓主的checknum方法最后是要提交表單的,所以如果用鍵盤事件,那每一次輸入一個(gè)字符或刪除一個(gè)字符,都會(huì)觸發(fā)表單提交動(dòng)作,這應(yīng)該不是樓主要的結(jié)果。字符修改后觸發(fā)JS方法有專門的事件處理方法onchange。樓主可以吧onblur換成onchange試試。
!DOCTYPE html
html
head
meta charset="utf-8"
title/title
link rel="stylesheet" href="---.css"
script src="---.js"/script
/head
body
div class="container"
div class="shop"
div class="header"
input type="checkbox" class="shop-checkbox"
span class="shop-icon"/span
span class="shop-name"---/span
span class="wangwang-icon"/span
/div
div class="items"
div class="item"
divinput class="item-checkbox" type="checkbox" name="" id=""/div
div
span class="item-img"/span
/div
div class="item-name"
div----/div
div class="promotion-icons"span/spanspan/spanspan/span/div
/div
div class="sku"---/div
div class="price"
div class="price-1"---/div
div class="price-2" data-price="---"----/div
/div
div class="num-control"
span class="num-minus"-/span
input class="num" type="text" value="1"
span class="num-plus"+/span
/div
div class="item-price-total"
span¥50.13/span
/div
div class="operation"
div---/div
div---/div
/div
/div
/div
/div
div class="shop"
div class="header"
input type="checkbox" class="shop-checkbox"
span class="shop-icon"/span
span class="shop-name"---/span
span class="wangwang-icon"/span
/div
div class="items"
div class="item"
divinput class="item-checkbox" type="checkbox" name="" id=""/div
div
span class="item-img"/span
/div
div class="item-name"
div----/div
div class="promotion-icons"span/spanspan/spanspan/span/div
/div
div class="sku"---/div
div class="price"
div class="price-1"---/div
div class="price-2" data-price="---"---/div
/div
div class="num-control"
span class="num-minus"-/span
input class="num" type="text" value="1"
span class="num-plus"+/span
/div
div class="item-price-total"
span¥9.90/span
/div
div class="operation"
div移入收藏夾/div
div刪除/div
/div
/div
div class="item"
divinput class="item-checkbox" type="checkbox" name="" id=""/div
div
span class="item-img"/span
/div
div class="item-name"
div---/div
div class="promotion-icons"span/spanspan/spanspan/span/div
/div
div class="sku"---/div
div class="price"
div class="price-1"---/div
div class="price-2" data-price="---"---/div
/div
div class="num-control"
span class="num-minus"-/span
input class="num" type="text" value="1"
span class="num-plus"+/span
/div
div class="item-price-total"
span¥19.9/span
/div
div class="operation"
div移入收藏夾/div
div刪除/div
/div
/div
/div
/body
/html
.container{
width: 1000px;
margin-left: auto;
margin-right: auto;
color: #444444;
}
.header{
margin: 8px;
}
.shop-icon, .wangwang-icon, .promotion-icons span{
display:inline-block;
width: 15px;
height: 15px;
background-color: rgb(117,192,241);
}
.promotion-icons span{
margin-right: 4px;
}
.items{
border: 1px solid #ebe9e9;
}
.item{
display: flex;
margin: 8px;
}
.item-img{
width:100px;
height: 100px;
display: inline-block;
background-color: aquamarine;
margin-left: 6px;
margin-right: 6px;
}
.item-name
{
display: flex;
flex-direction: column;
justify-content: space-between;
}
.sku, .price,.item-price-total,.operation,.num-control{
margin-left: 18px;
}
.num{
width: 18px;
height: 15px;
}
.num-control{
display: flex;
align-items: baseline;
}
.num-minus,.num-plus{
width: 18px;
height: 22px;
display: inline-block;
background-color: #ebe9e9;
}
.checkout{
display: flex;
justify-content: space-between;
}
.shop{
margin-bottom: 20px;
margin-top: 30px;
}
.goods,.freight,.checkout-button{
margin-left: 15px;
}
.price-1{
text-decoration: line-through;
color: gray;
}
.check-num ,.total-price{
font-size: large;
color: red;
margin-left: 3px;
margin-right: 3px;
}
.checkout-button{
height: 30px;
width: 50px;
background-color: beige;
}
.checkout{
margin-top: 15px;
}
.item-name{
width: 25%;
}
.item-price-total{
width: 5%;
}
.sku{
width: 20%;
}
function updatePrice(){
let items = document.querySelectorAll('.item');
let totalNum = 0;
let totalPrice = 0;
items.forEach(function(item){
if(item.querySelector('.item-checkbox').checked){
let num = item.querySelector('.num').value;
totalNum = totalNum + parseInt(num);
let price = item.querySelector('.price-2').getAttribute('data-price');
totalPrice = totalPrice + parseFloat(price) * num;
}
});
document.querySelector('.check-num').innerText= totalNum;
document.querySelector('.total-price').innerText = totalPrice;
}
window.onload=function(){
let itemCheckboxes = document.querySelectorAll('.item-checkbox');
itemCheckboxes.forEach(function(itemCheckbox){
itemCheckbox.onchange = function(){
updatePrice();
}
});
let minuses = document.querySelectorAll('.num-minus');
minuses.forEach(function(minus){
minus.onclick = function(event){
let num=minus.parentElement.querySelector('.num').value;
if(parseInt(num)1)
{
minus.parentElement.querySelector('.num').value=parseInt(num)-1;
updatePrice();
}
};
});
let pluses = document.querySelectorAll('.num-plus');
pluses.forEach(function(plus){
plus.onclick = function(event){
let num=plus.parentElement.querySelector('.num').value;
plus.parentElement.querySelector('.num').value=parseInt(num)+1;
updatePrice();
}
});
}
說(shuō)明 :平時(shí)我們喜歡購(gòu)物,但有時(shí)也有一些人手機(jī)卡頻繁點(diǎn)擊加入購(gòu)物車,造成請(qǐng)求服務(wù)器頻繁操作,在用戶基數(shù)大的時(shí)候,會(huì)給服務(wù)器造成不少的資源浪費(fèi),所以給出下面簡(jiǎn)單demo供大家參考。在第一次點(diǎn)擊后,如果再接連點(diǎn)擊會(huì)彈出操作頻繁,本案例設(shè)置下次點(diǎn)擊間隔在1.5s。
一般有兩種做法。
一種是
在頁(yè)面加載完畢后,先初始化一次總金額。
在調(diào)用添加、減少方法時(shí),獲取總金額的值然后加上或減去物品*數(shù)量的值
另一種就是
同樣先初始化總金額
在調(diào)用添加、減少方法后,直接重新計(jì)算所有price的值然后給總金額賦值。
```js
function?updateTotalPrice()?{
let?count=?0
const?priceNodes?=?document.querySelectorAll("li?input[name='price']")
priceNodes.forEach(node?=?{
count+=?parseFloat(node.value)?*?100
})
document.querySelector("#totalPrice").innerHTML?=?count/?100
}
```
click(點(diǎn)擊事件) blur(失去焦點(diǎn)事件) change(內(nèi)容改變事件) submit(提交事件)主要就是這些了