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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował piotrex41 24.07.2012, 12:10:10
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.
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.
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.
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 (IMG:style_emoticons/default/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
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ż.
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 (IMG:style_emoticons/default/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
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));
});
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));
    });
});
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...
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 (IMG:style_emoticons/default/wink.gif) Jakie to człowiek głupie rzeczy robi jak siedzi nad czymś 3-4h (IMG:style_emoticons/default/tongue.gif) Dziękuję za pomoc i cierpliwość (IMG:style_emoticons/default/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));
    });
});
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 03:37