Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [jQuery] Podliczanie
piotrex41
post
Post #1





Grupa: Zarejestrowani
Postów: 168
Pomógł: 26
Dołączył: 15.09.2011
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam,

Piszę skrypt formularza, który na końcu ma być zliczany (kwota do zapłaty), ale napotkałem 2 problemy:
1. Kiedy wpiszę literę zamiast liczby suma się wywala - zamienia się na NaN
2. Kiedy wpiszę do formularza wartość po raz drugi (inną) to znowu ją dolicza zamiast zamienić.

Oto skrypt:
Kod
$(function($)
{
    var divs = ['#smoczek', '#butelka_smoczek'];
    var suma = 0;
    $('input').keyup(function()
    {
        var value = $(this).val();
        var id = $(this).attr('id');
        var cena = $('div' + divs[id-1] + ' div.item_price strong').text().replace(',', '\.');
        var koszt = parseFloat(cena) * parseFloat(value);
        suma = parseFloat(suma) + parseFloat(koszt.toFixed(2));
        $('div#suma').text(suma.toFixed(2));
    }).keyup();
});

A tu kawałek kodu HTML odpowiedzialny za inputa i cenę:
Kod
<div class="cell price">
    <label for="1">ilość sztuk:</label>
    <input type="text" name="szt1" id="1" maxlength="3" value="0" onkeyup="this.value=this.value.replace(/\D/g,'')" onBlur="if(this.value=='') this.value='0';" onFocus="if(this.value=='0') this.value='';"/>
    <div class="item_price">
        <strong>49,<small>40</small></strong> <span>/ szt.</span>
    </div>
</div>

Ogólna struktura DIVów wygląda mniej więcej tak:
Kod
div.table -> div.img | div.desc | div.price <- /div.table

Proszę o pomoc, wskazówki, rady smile.gif

Ten post edytował piotrex41 24.07.2012, 12:10:10


--------------------
www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ad1) Sprawdzaj co jest wynikiem parseFloat a nie mnożysz od razu....
ad2) Powinienieś za każdym razem zliczać sumę wszystkich inputów a nie aktualnego.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrex41
post
Post #3





Grupa: Zarejestrowani
Postów: 168
Pomógł: 26
Dołączył: 15.09.2011
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Ad2. A jeśli mam tych inputów 20? Ciężko było z wyciąganiem cen, dlatego jest tablica. Wrzucony kawałek kodu to tylko kawałek do testów, ale formularz będzie dłuższy, 15-20 pozycji.


--------------------
www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A co za różnica czy 20 czy 2 czy 5? Kod do napisania dokładnie ten sam i ta sama liczba linijek tego kodu.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrex41
post
Post #5





Grupa: Zarejestrowani
Postów: 168
Pomógł: 26
Dołączył: 15.09.2011
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Z jQuery dopiero zaczynam zabawę, więc to pisanie nie idzie mi tak sprawnie, dlatego też nie bardzo wiem jak to napisać żeby miało tyle samo linijek, bez znaczenia ile inputów. Po prostu kombinuję ucząc się, więc jak byś mógł podpowiedzieć coś więcej smile.gif

AD1 Zrobiłem sprawdzanie czy parseFloat(value) jest liczbą, ew. alert.
Kod
$(function($)
{
    var divs = ['#smoczek', '#butelka_smoczek'];
    var suma = 0;
    $('input').keyup(function()
    {
        var value = $(this).val();
        var id = $(this).attr('id');
        var cena = $('div' + divs[id-1] + ' div.item_price strong').text().replace(',', '\.');
        var koszt = parseFloat(cena) * parseFloat(value);
        if (isNaN(parseFloat(value)))
        {
            alert('należy podać liczbę')
        }
        else
        {
            suma = parseFloat(suma) + parseFloat(koszt.toFixed(2));
        }
        $('div#suma').text(suma.toFixed(2));
    }).keyup();
});


Ten post edytował piotrex41 24.07.2012, 12:34:05


--------------------
www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Kod na sumowanie wszystkiego:
Kod
suma = 0;
$('input').each(function()
    {
        var value = $(this).val();
        var id = $(this).attr('id');
        var cena = $('div' + divs[id-1] + ' div.item_price strong').text().replace(',', '\.');
        var koszt = parseFloat(cena) * parseFloat(value);
        suma = parseFloat(suma) + parseFloat(koszt.toFixed(2));
        
    });
$('div#suma').text(suma.toFixed(2));

I już.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrex41
post
Post #7





Grupa: Zarejestrowani
Postów: 168
Pomógł: 26
Dołączył: 15.09.2011
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Niestety nic nie zlicza wink.gif

Kod
$(function($)
{
    var divs = ['#smoczek', '#butelka_smoczek'];
    var suma = 0;
    $('input').each(function()
    {
        var value = $(this).val();
        var id = $(this).attr('id');
        var cena = $('div' + divs[id-1] + ' div.item_price strong').text().replace(',', '\.');
        var koszt = parseFloat(cena) * parseFloat(value);
        if (isNaN(parseFloat(value)))
        {
            alert('należy podać liczbę');
        }
        else
        {
            suma = parseFloat(suma) + parseFloat(koszt.toFixed(2));
        }
    });
    $('div#suma').text(suma.toFixed(2));
});


Ten post edytował piotrex41 24.07.2012, 12:42:39


--------------------
www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Trudno by ci od razu po odpaleniu strony coś zliczył.... podejrzewam, ze po odpaleniu strony w inputach nic nie masz.

ps: po grzyba ty się bawisz w jakieś divy, parsowanie ich zawartosci.... toż to koszmar jakiś... dodawaj cene jako atrybut inputa i po sprawie

Kod
$(function($)
{
    var suma = 0;
    $('input').each(function()
    {
        var value = $(this).val();
        var id = $(this).attr('id');
        var cena = $(this).attr('cena');
        var koszt = parseFloat(cena) * parseFloat(value);
        if (isNaN(parseFloat(value)))
        {
            alert('należy podać liczbę');
        }
        else
        {
            suma = parseFloat(suma) + parseFloat(koszt.toFixed(2));
        }
    });
    $('div#suma').text(suma.toFixed(2));
});


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrex41
post
Post #9





Grupa: Zarejestrowani
Postów: 168
Pomógł: 26
Dołączył: 15.09.2011
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


No ok, ale jak dam tak, to znowu sumuje nawet jak zmienię wartość, to tylko dolicza.
Kod
$(function($)
{
    var divs = ['#smoczek', '#butelka_smoczek'];
    var suma = 0;
    $('input').keyup(function()
    {
        $('input').each(function()
        {
            var value = $(this).val();
            var id = $(this).attr('id');
            var cena = $('div' + divs[id-1] + ' div.item_price strong').text().replace(',', '\.');
            var koszt = parseFloat(cena) * parseFloat(value);
            if (isNaN(parseFloat(value)))
            {
                alert('należy podać liczbę');
            }
            else
            {
                suma = parseFloat(suma) + parseFloat(koszt.toFixed(2));
            }
        });
        $('div#suma').text(suma.toFixed(2));
    });
});


--------------------
www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No ale przed sumowaniem masz zerować sume.... a ty sume zerujesz raz na początku...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrex41
post
Post #11





Grupa: Zarejestrowani
Postów: 168
Pomógł: 26
Dołączył: 15.09.2011
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


No i teraz działa wink.gif Jakie to człowiek głupie rzeczy robi jak siedzi nad czymś 3-4h tongue.gif Dziękuję za pomoc i cierpliwość smile.gif
Kod
$(function($)
{
    var divs = ['#smoczek', '#butelka_smoczek'];
    $('input').keyup(function()
    {
        var suma = 0;
        $('input').each(function()
        {
            var value = $(this).val();
            var id = $(this).attr('id');
            var cena = $('div' + divs[id-1] + ' div.item_price strong').text().replace(',', '\.');
            var koszt = parseFloat(cena) * parseFloat(value);
            if (isNaN(parseFloat(value)))
            {
                alert('należy podać liczbę');
            }
            else
            {
                suma = parseFloat(suma) + parseFloat(koszt.toFixed(2));
            }
        });
        $('div#suma').text(suma.toFixed(2));
    });
});


--------------------
www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 06:44