How2j仿寫天貓五購(gòu)物車

全選

選中一個(gè)

6.6日 16:11更新購(gòu)物車

我胡漢三又回來(lái)了,有幾天沒(méi)更新了吧,慚愧!
昨天到今天終于把購(gòu)物車啃出來(lái)了,不容易啊。現(xiàn)在想想也不是挺難嘛,為何還看了那么久。是不是有點(diǎn)馬后炮,哈哈。怎么說(shuō)呢,購(gòu)物車需要寫的jquery挺多的,一開(kāi)始看到那么多久頭疼。

因?yàn)槔锩嬗械墓δ苁侵貜?fù)的,所以把重復(fù)的內(nèi)容拿出來(lái)放到函數(shù)里,需要用到時(shí)在調(diào)用他。全選,圖片前面的小框其實(shí)是圖片,選中的時(shí)候就換成選中的圖片。我一開(kāi)始還以為這是一個(gè)復(fù)選框呢。不過(guò),這樣也更容易實(shí)現(xiàn),挺佩服站長(zhǎng)的。

選中圖片時(shí),小框圖片換成選中的圖片,當(dāng)前行改變背景色,下面的結(jié)算按鈕背景也換成紅色,還要判斷是不是所有行的圖片都選中了,如果選中了就把全選換成選中。所以,在這個(gè)事件里,要調(diào)用的三個(gè)函數(shù),分別實(shí)現(xiàn)這些。

<script>
$("img.cartProductItemIfSelected").click(function(){
      var selectit =  $(this).attr("selectit");
      if("selectit" == selectit){
        $(this).parents("tr.trInfo").css("background-color" , "white");
        $(this).attr("src" , "http://how2j.cn/tmall/img/site/cartNotSelected.png");
        $(this).attr("selectit" , "false");
      }
      else{
        $(this).parents("tr.trInfo").css("background-color" , "#FFF8E1");
        $(this).attr("src" , "http://how2j.cn/tmall/img/site/cartSelected.png");
        $(this).attr("selectit" , "selectit");
      }
       checkAll();
       accountNumber();
       accountBotton();
      });
</script>

當(dāng)鼠標(biāo)點(diǎn)擊小方框時(shí),取出當(dāng)前元素的selectit,這個(gè)元素屬性是自定義的,初始化為false,
當(dāng)selectit為false時(shí)代表未選中,為selectit時(shí)代表選中。然后就判斷selectit是否為selectit如果相等,就把背景色改成和原來(lái)一樣,圖片改成未選中,并且把selectit改為false.如果是false,把背景色改成黃色,圖片改成選中。改變背景色,這里用的是$(this).parents("tr.trInfo").css();代表的是當(dāng)前元素的tr.trInfo這個(gè)父元素,如果parents("tr.trInfo")括號(hào)為空,則默認(rèn)為他的所有父元素。

現(xiàn)在就是調(diào)用其他函數(shù)了,先調(diào)用checkAll()這個(gè)函數(shù),代表全選是否打開(kāi),代碼如下。

 function checkAll(){
    var selectAll = true;
    $("img.cartProductItemIfSelected").each(function(){
        if ("false" == $(this).attr("selectit"))
              selectAll = false;
    });
     if (selectAll){
        $("img.selectAllItem").attr("src" , "http://how2j.cn/tmall/img/site/cartSelected.png");
     }
     else{
        $("img.selectAllItem").attr("src" , "http://how2j.cn/tmall/img/site/cartNotSelected.png" );
     }
   }

先遍歷每行小方框,把每個(gè)小方框的selectit屬性都拿來(lái)和false比較,判斷是否有沒(méi)有被選中的,只要有一個(gè)未被選中,就把變量selectAll設(shè)為假,然后就判斷變量。如果為真 ,就把全選改為選中,為假則相反。

接下來(lái)就是** accountNumber();**這個(gè)函數(shù)了,這個(gè)函數(shù)是把結(jié)算那里的價(jià)格改成選中的價(jià)格。代碼如下

     function accountNumber(){
        var sum = 0;
        var totalNum = 0;
     $("img.cartProductItemIfSelected[selectit = 'selectit']").each(function(){
      var oiid =    $(this).attr("oiid");
      var price = $("span.priceMoney[oiid = "+oiid+"]").text();
      price = price.replace(/,/g , "");
      price = price.replace(/¥/g , "");
      sum += new Number(price);
      var ShuRu = $("input.inputSee[oiid = "+oiid+"]").val();
      totalNum += new Number(ShuRu);
       });
      $("span.JiaGe1").html("¥" + formatMoney(sum));
      $("span.JiaGe2").html("¥" + formatMoney(sum));
      $("JianShu").html(totalNum);
    }

** $("img.cartProductItemIfSelected[selectit = 'selectit']").each(function()這句代碼,代表遍歷選中的小方框,oiid也是自定義的屬性,然后獲取當(dāng)前元素屬性oiid的值,在金額那里也設(shè)了這個(gè)屬相,并且和當(dāng)前行相等,每一行的oiid**值都不一樣,這樣才好找每一行的金額。

** var price = $("span.priceMoney[oiid = "+oiid+"]").text();** 這樣就是找和當(dāng)前元素oiid值一樣的金額,并把金額里的文本內(nèi)容取出來(lái)。因?yàn)榻痤~里面有¥和,這兩個(gè)符號(hào),所以就用replace這個(gè)函數(shù)去掉,然后把取出來(lái)的金額相加,還有下面有一個(gè)件數(shù),再把件數(shù)取出來(lái)相加。最后改變結(jié)算按鈕前面文本內(nèi)容為相加后的金額,件數(shù)。

最后調(diào)用** accountBotton();**函數(shù),這個(gè)函數(shù)是改變按鈕背景色以及解除禁用。代碼如下。

function accountBotton(){
     var buttonAll = false;
     $("img.cartProductItemIfSelected").each(function(){
        if ("selectit" == $(this).attr("selectit")){
            buttonAll = true;
        }
        
     });
     if (buttonAll){
         $("button.button1").css("background-color" , "#C40000");
         $("button.button1").removeAttr("disabled");
        }
     else{
        $("button.button1").css("background-color" , "#AAAAAA");
        $("button.button1").attr("disabled" , "disabled");
        
     }
   }

 }); 

改變背景色,遍歷小方框。如果小方框有一個(gè)選中了,就改變按鈕的背景色,并解除禁用。disabled屬性是禁用按鈕,也就無(wú)法鼠標(biāo)點(diǎn)擊按鈕,沒(méi)選中就相反。

下面就是鍵盤按下輸入框事件發(fā)生的 事了,代碼如下。

 $("input.inputSee").keyup(function(){
        var pid = $(this).attr("pid");
        var XianZhi = $("span.XianZhi[pid = "+pid+"]").text();
        var price = $("span.spanShu[pid = "+pid+"]").text();
        var num = $("input.inputSee[pid = "+pid+"]").val();
        num = parseInt(num);
        if (isNaN(num))
            num = 1;
        if (num > XianZhi)
            num = XianZhi;
        if (num <= 0)
            num = 1;
        synPrice(pid , price , num);
      });

pid也是自定義的屬性,和oiid差不多主要是找到一行的數(shù)據(jù)紐帶。XianZhi
這個(gè)標(biāo)簽是庫(kù)存, 也就是最大值。和spanShu這兩個(gè)標(biāo)簽是隱藏的,設(shè)這兩個(gè)標(biāo)簽主要是取值方便。取出輸入框的值,不能是字符不能超過(guò)庫(kù)存和小于0,然首把取到的值放到下面的函數(shù),代碼如下。

function synPrice(pid, price , num){
        $("input.inputSee[pid = "+pid+"]").val(num);
        var totalNum = formatMoney(price * num);
        $("span.priceMoney[pid = "+pid+"]").html("¥" + totalNum);
        accountNumber();

     }

把輸入框和pid值相等的寫入修改好的值,再把金額那里的內(nèi)容修改成增加后的值。

  $("a.aTop").click(function(){
        var pid = $(this).attr("pid");
        var XianZhi =  $("span.XianZhi[pid = "+pid+"]").text();
        var price = $("span.spanShu[pid = "+pid+"]").text();
        var num = $("input.inputSee[pid ="+pid+"]").val();
        num--;
        if (num <= 0)
            num = 1;
        synPrice(pid , price , num);
      });
 $("a.aDown").click(function(){
        var pid = $(this).attr("pid");
        var XianZhi =  $("span.XianZhi[pid = "+pid+"]").text();
        var price = $("span.spanShu[pid = "+pid+"]").text();
        var num = $("input.inputSee[pid ="+pid+"]").val();
        num++;
        if (num > XianZhi)
            num = XianZhi;
        synPrice(pid , price , num);
      });

上面兩個(gè)事件,分別是點(diǎn)擊+和-后發(fā)生的事,比較簡(jiǎn)單。下面的是把金額修改成千為表示法,也就是在千位后加分號(hào)。

function formatMoney(num){
    num = num.toString().replace(/\$|\,/g,'');  
    if(isNaN(num))  
        num = "0";  
    sign = (num == (num = Math.abs(num)));  
    num = Math.floor(num*100+0.50000000001);  
    cents = num%100;  
    num = Math.floor(num/100).toString();  
    if(cents<10)  
    cents = "0" + cents;  
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)  
    num = num.substring(0,num.length-(4*i+3))+','+  
    num.substring(num.length-(4*i+3));  
    return (((sign)?'':'-') + num + '.' + cents);  
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容