Avatar billede yoghurt-feen Nybegynder
03. november 2011 - 20:53 Der er 6 kommentarer og
1 løsning

jQuery, fjern enhed fra grid

Hej!

Jeg har et drag-drop shopping system, hvor hvert item bliver tilføjet til et grid! Men jeg kan simpelthen ikke gennemskue hvordan jeg jeg laver en funktion der fjerner en enhed fra systemet!

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="keywords" content="jquery,ui,easy,easyui,web">
    <meta name="description" content="easyui help you build your web page easily!">
    <title>jQuery EasyUI Demo</title>
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/icon.css">
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
    <script type="text/javascript" src="http://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
    <style type="text/css">
        body {
            font-family:Arial, Helvetica, sans-serif;
        }
   
        .products{
            list-style:none;
            margin-right:300px;
            padding:0px;
            height:100%;
        }
        .products li{
            display:inline;
            float:left;
            margin:10px;
        }
        .item{
            display:block;
            text-decoration:none;
        }
        .item img{
            border:1px solid #333;
        }
        .item p{
            margin:0;
            font-weight:bold;
            text-align:center;
            color:#000000;
        }
        .cart{
            position:fixed;
            right:0;
            top:0;
            width:300px;
            height:100%;
            background:#ccc;
            padding:0px 10px;
        }
        h1{
            text-align:center;
            color:#555;
        }
        h2{
            position:absolute;
            font-size:16px;
            left:10px;
            bottom:20px;
            color:#555;
        }
        .total{
            margin:0;
            text-align:right;
            padding-right:20px;
        }
    </style>
    <script>
        var data = {"total":0,"rows":[]};
        var totalCost = 0;
       
        $(function(){
            $('#cartcontent').datagrid({
                singleSelect:true
            });
            $('.item').draggable({
                revert:true,
                proxy:'clone',
                onStartDrag:function(){
                    $(this).draggable('options').cursor = 'not-allowed';
                    $(this).draggable('proxy').css('z-index',10);
                },
                onStopDrag:function(){
                    $(this).draggable('options').cursor='move';
                }
            });
            $('.cart').droppable({
                onDragEnter:function(e,source){
                    $(source).draggable('options').cursor='auto';
                },
                onDragLeave:function(e,source){
                    $(source).draggable('options').cursor='not-allowed';
                },
                onDrop:function(e,source){
                    var name = $(source).find('p:eq(0)').html();
                    var price = $(source).find('p:eq(1)').html();
                    addProduct(name, parseFloat(price.split('Kr. ')[1]));
                }
            });
        });
       
       
        function addProduct(name,price){
            function add(){
                for(var i=0; i<data.total; i++){
                    var row = data.rows[i];
                    if (row.name == name){
                        row.quantity += 1;
                        return;
                    }
                }
                data.total += 1;
                data.rows.push({
                    name:name,
                    quantity:1,
                    price:price
                });
            }
            var leje = 99
            add();
            totalCost += price;
            var summen = leje + totalCost
            $('#cartcontent').datagrid('loadData', data);
            $('div.cart .total').html('Månedsleje: ' +leje+' Kr.<br />Total: '+summen+' Kr.');
        }
    </script>
</head>
<body style="margin:0;padding:0;height:100%;background:#fafafa;">
    <ul class="products">
        <li>
            <a href="#" class="item">
                <img src="images/shirt1.gif"/>
                <div>
                    <p>Balloon</p>
                    <p>Kr. 300</p>
                </div>
            </a>
        </li>
        <li>
            <a href="#" class="item">
                <img src="images/shirt2.gif"/>
                <div>
                    <p>Feeling</p>
                    <p>Kr. 300</p>
                </div>
            </a>
        </li>
        <li>
            <a href="#" class="item">
                <img src="images/shirt3.gif"/>
                <div>
                    <p>Elephant</p>
                    <p>Kr. 300</p>
                </div>
            </a>
        </li>
        <li>
            <a href="#" class="item">
                <img src="images/shirt4.gif"/>
                <div>
                    <p>Stamps</p>
                    <p>Kr. 300</p>
                </div>
            </a>
        </li>
        <li>
            <a href="#" class="item">
                <img src="images/shirt5.gif"/>
                <div>
                    <p>Monogram</p>
                    <p>Kr. 300</p>
                </div>
            </a>
        </li>
        <li>
            <a href="#" class="item">
                <img src="images/shirt6.gif"/>
                <div>
                    <p>Rolling</p>
                    <p>Kr. 300</p>
                </div>
            </a>
        </li>
    </ul>
    <div class="cart">
        <h1>Shopping Cart</h1>
        <div style="background:#fff">
        <table id="cartcontent" fitColumns="true" style="width:300px;height:auto;">
            <thead>
                <tr>
                    <th field="name" width=140>Name</th>
                    <th field="quantity" width=60 align="right">Quantity</th>
                    <th field="price" width=60 align="right">Price</th>
                </tr>
            </thead>
        </table>
        </div>
        <p class="total">Total: 0 Kr.</p>
        <h2>Drop here to add to cart</h2>
    </div>
</body>
</html>
Avatar billede tjens Nybegynder
03. november 2011 - 22:45 #1
Din grid bliver gentegnet hver gang, der tilføjes via funktion addProduct.

Du skal bare skrive en removeProduct funktion, som gør det modsatte af addProduct: D.v.s. fjerner en linie fra data.rows med f.eks. data.rows.splice(i, 1);
og tæller ned, de steder der tælles op i addProduct.
Avatar billede yoghurt-feen Nybegynder
03. november 2011 - 22:53 #2
Jamen det er lige præcis det jeg ikke kan konstruere inde i mit hoved! Hvis man kan få programmerings-skrive-blokering, så er det det jeg lider af ligenu!
Avatar billede yoghurt-feen Nybegynder
03. november 2011 - 23:09 #3
Tricket er at man gerne skulle kunne fjerne en quantity af gangen, og først når der er én tilbage, skal linjen blive fjernet når man trykker på "slet" knappen ud for linjen
Avatar billede tjens Nybegynder
05. november 2011 - 15:47 #4
Her er et bud på en slette funktion i stil med din egen add funktion:
      function RemoveProduct(name){

            function remove(){
                for(var i=0; i<data.total; i++){
                    var row = data.rows[i];
                    if (row.name == name){
                        totalCost -= row.price;
                        row.quantity -= 1;
                        if (row.quantity > 0) {
                          return;
                        }
                        data.total -= 1;
                        data.rows.splice( i, 1);
                    }
                }
            }
            remove();

            var leje = 99
            var summen = leje + totalCost;
            $('#cartcontent').datagrid('loadData', data);
            $('div.cart .total').html('Månedsleje: ' +leje+' Kr.<br />Total: '+summen+' Kr.');
        }
Avatar billede yoghurt-feen Nybegynder
05. november 2011 - 22:26 #5
Det er præcis det jeg leder efter! :) Men hvordan tilføjer man så en delete funktion ud for hver row? Den mest logiske funktion at bruge er så vidt jeg kan læse .append()? Eller er jeg på vildspor?
Avatar billede yoghurt-feen Nybegynder
07. november 2011 - 22:15 #6
tjens - Jeg har kunnet bruge dit svar til rigtig meget! Smid lige et svar, så jeg kan give dig dine point! :)
Avatar billede tjens Nybegynder
07. november 2011 - 23:07 #7
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester