購物車

<script>
/**
1恶座、全選功能
  每一行都會別選中
  每行的小計價格會匯總加到一起放入總價
2、單選功能
  這一行會被選中或者取消選中
  將購物車內(nèi)被選中的行的小計價格匯總加到一起放入總計
  判斷是否是被全選了(全選按鈕是否該被選中)
3沥阳、數(shù)量加減按鈕(一)
  這一行被選中
  數(shù)量進行添加或者減少(最少為1)
  計算這一行的小計價格
  將購物車內(nèi)被選中的行的小計價格匯總加到一起放入總計
4跨琳、手動修改數(shù)量
  這一行被選中
  計算這一行的小計價格
  將購物車內(nèi)被選中的行的小計價格匯總加到一起放入總計
5、刪除按鈕
  這一行會被移掉
  將購物車內(nèi)被選中的行的小計價格匯總加到一起放入總計
6桐罕、刪除被選中的商品
  被選中的商品會被刪除
  購物車內(nèi)總計價格為0
*/
</script>

<script>
  // 找到 DOM 節(jié)點
  var add = document.querySelectorAll('.Increase')   // 所有的加按鈕
  var reduce = document.querySelectorAll('.Reduce')  // 所有的減按鈕
  var numIpt = document.querySelectorAll('.unm')   // 找到所有數(shù)量輸入框
  var rows = document.querySelectorAll('.row')      // 找到所有的行
  var choose = document.querySelectorAll('.choose')  // 找到所有單選框
  var chooseAll = document.querySelectorAll('choose_all')  // 找到所有的全選按鈕
  var btnDel = document.querySelectorAll('.btn-del')    // 找到所有的刪除按鈕
  var delCheck = document.querySelector('.del-check')   // 刪除被選中
 
  // 數(shù)量添加事件 1
  for(var i = 0; i < add.length; i++) {
    add[i].onclick = function() {
      numChange(this, 'add')         // this指向當(dāng)前被點擊的節(jié)點
    }
  }

  // 數(shù)量減少事件 2
  for(var i = 0; i < reduce.length; i++) {
    reduce[i].onclick = function() {
      numChange(this, 'reduce')
    }
  }

  // 手動修改數(shù)量 3
  for(var i = 0; i < numIpt; i++) {
    // 輸入完之后
    numIpt[i].onblur = function() {
      if(this.value < 1) {   // 數(shù)量不可以少于1
        this.value = 1
      }
      this.value = parseInt(this.value)   // 保證數(shù)量是整數(shù)
      numChange(this, 'cursor')
    }
  }

  // 單選框點擊事件  5
  for(var i = 0; i < choose.length; i++) {
    choose[i].onclick = function() {
      getTotal()   // 計算總價
    }
  }

  // 全選 6
  for(var i = 0; i < chooseAll.length; i++) {
    chooseAll[i].onclick = function() {
      for(var i = 0; i < rows.length; i++) {
        var check = rows[i].querySelector('.choose')   // 找到每行的選中框
        check.checked = this.checked
      }
      chooseAll[0].checked = chooseAll[1].checked = this.checked
      getTotal()
    }
  }
  
  //  刪除這一行  7 
  for(var i = 0; i < btnDel.length; i++) {
    btnDel[i].onclick = function(event) {
      event.preventDefault();
      var tr = this.parentNode.parentNode
      tr.parentNode.removeChild(tr)
      getTotal()
    }
  }

  // 刪除被選中的商品
  delCheck.onclick = function() {
    rows = document.querySelectorAll('.row')
    for(var i = 0; i < rows.length; i++) {
      // 找到被選中的行
      var check = rows[i].querySelector('.choose')   // 找到每行的選中框
      if(check.checked) {
        rows[i].parentNode.removeChild(rows[i])
      }
    }
    getTotal()
  }

  // 總計功能 4
  function getTotal() {
    // 1脉让、設(shè)置總價
    var total = 0

    // 遍歷所有行
    rows = document.querySelectorAll('.row')
    for(var i = 0; i < rows.length; i++) {
      // 找到被選中的行
      var check = rows[i].querySelector('.choose')   // 找到每行的選中框
      if(check.checked) {
        var smTot = rows[i].querySelector('.u-price').innerHTML
        smTot = Number(smTot)
        total = total + smTot
      }
    }

    var tPrice = document.querySelector('.t-price')
    tPrice.innerHTML = total.toFixed(2)

    // 2. 判斷是否全選
    var isAllCheck = true    // 
    for(var i = 0; i < rows.length; i++) {
      var check = rows[i].querySelector('.choose')   // 找到每行的選中框
      if(!check.checked) {    // 一旦有沒有被選中的
        isAllCheck = false
        break                   // 
      }
      if(rows.length) {
        isAllCheck = false
      }
    }
    chooseAll[0].checked = isAllCheck
    chooseAll[1].checked = isAllCheck

    // 3. 計算總商品個數(shù)
    var allNum = 0
    for(var i = 0; i < rows.length; i++) {
      // 找到被選中的行
      var check = rows[i].querySelector('.choose')   // 找到每行的選中框
      if(check.checked) {
        var smTot = rows[i].querySelector('.unum').value
        smTot = Number(smTot)
        allNum = allNum + smTot
      }
    }
    document.querySelector('.t-number').innerHTML = allNum
  }
  getTotal()
  /**
    數(shù)量變化的函數(shù)
    {Object} dom 被點擊的那個DOM節(jié)點
    {String} act 數(shù)量添加還是減少還是手動修改
  */
  function numChange(dom, act) {
     // 1. 數(shù)量變化
     var amount = dom.parentNode     // 父標(biāo)簽
      var ipt = amount.querySelector('.num')   // 找到數(shù)量框
      var num = ipt.value      // 數(shù)量

      //
      if(act == 'add') {   // 添加行為
        num++
        ipt.value = num
      } else if(act == 'reduce') {  // 減少行為
        if(num == 1) {
          num = 1      // 數(shù)量是一就不變化
        } else {
          num--          // 數(shù)量減一
        }
        ipt.value = num
      } else if (act == 'cursor'){
        console.log('手動修改數(shù)量')
      } else {   // 非法行為
        return
      }


      // 2. 計算這一行的小計
      var tr = amount.parentNode.parentNode         // 找到當(dāng)前行
      var unit = tr.querySelector('.unit')      // 價格框

      var price = unit.innerHTML
      var smTotal = num * price             // 小計
      smTotal = smTotal.toFixed(2)       // 保留兩位小數(shù)
      // 3. 將小計放入到對應(yīng)的位置
      var smPrice = tr.querySelector('.u-price')     // 小計框
      smPrice.innerHTML = smTotal
      // 4. 這一行被選中
      var choose = tr.querySelector('.choose')
      choose.checked = true
      // 5. 計算總計價格
      getTotal()
  }

</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市功炮,隨后出現(xiàn)的幾起案子溅潜,更是在濱河造成了極大的恐慌,老刑警劉巖薪伏,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滚澜,死亡現(xiàn)場離奇詭異,居然都是意外死亡毅该,警方通過查閱死者的電腦和手機博秫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門潦牛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眶掌,“玉大人,你說我怎么就攤上這事巴碗∑优溃” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵橡淆,是天一觀的道長召噩。 經(jīng)常有香客問我母赵,道長,這世上最難降的妖魔是什么具滴? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任凹嘲,我火速辦了婚禮,結(jié)果婚禮上构韵,老公的妹妹穿的比我還像新娘周蹭。我一直安慰自己,他們只是感情好疲恢,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布凶朗。 她就那樣靜靜地躺著,像睡著了一般显拳。 火紅的嫁衣襯著肌膚如雪棚愤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天杂数,我揣著相機與錄音宛畦,去河邊找鬼。 笑死揍移,一個胖子當(dāng)著我的面吹牛刃永,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播羊精,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼斯够,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了喧锦?” 一聲冷哼從身側(cè)響起读规,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎燃少,沒想到半個月后束亏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡阵具,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年碍遍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阳液。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡怕敬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帘皿,到底是詐尸還是另有隱情东跪,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站虽填,受9級特大地震影響丁恭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斋日,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一牲览、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恶守,春花似錦竭恬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至押框,卻和暖如春岔绸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背橡伞。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工盒揉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兑徘。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓刚盈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挂脑。 傳聞我的和親對象是個殘疾皇子藕漱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容