Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [js] Dodawanie pól formularza
Crop
post 1.12.2007, 20:53:32
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 5.04.2007

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


Witam mam problem chciałbym dodać wartości pól formularza a następnie wstawić je do jednego z pól którego nie dodaje.
Moje wypociny to:
Kod
<script type="text/javascript">
                function zlicz()    {
                    var last = document.getElementById(last.value);
                    var subiekt = document.getElementById(subiekt.value);
                    var caffe = document.getElementById(caffe.value);
                    var serwis = document.getElementById(serwis.value);
                    var abonament = document.getElementById(abonament.value);
                    var zwroty = document.getElementById(zwroty.value);
                    var pobrania = document.getElementById(pobrania.value);
                    var suma = last + subiekt + caffe + serwis + abonamenty + zwroty - pobrania;
                    document.getElementById(suma.value) = suma;
                }            
            </script>
            <table border="0"><form action="./?show=rozliczenia&action=rozliczenie&step=1" method="POST">
            <tr><td>Dzień</td><td>'. $data .'</td></tr>
            <tr><td width="220px">Siedziba</td><td width="260px"><input type="hidden" name="stacja" value="'. $this->id .'" />'. $this->name .'</td></tr>
            <tr><td>Poprzednie saldo</td><td><input type="text" name="last" id="last" value="'. $datab[amounts] .'" readonly />PLN</td></tr>
            <tr></tr><tr><td><b>Sprzedaż</b></td></tr>
            <tr><td>Subiekt <small>sprzedaż musibyć równa paragonowi</small></td><td><input type="text" id="subiekt" name="subiekt" onChange="zlicz()" />PLN</td></tr>
            <tr><td>Caffe <small>caffe, ksero, wydruki</small></td><td><input type="text" id="caffe" name="caffe" onChange="zlicz()" />PLN</td></tr>
            <tr><td>Serwis <small>naprawy serwisowe</small></td><td><input type="text" id="serwis" name="serwis" onChange="zlicz()" />PLN</td></tr>
            <tr><td>Abonamenty internetowe</td><td><input type="text" id="abonament" name="abonament" onChange="zlicz()" />PLN</td></tr>
            <tr><td>Zwroty do kasy <small>Zaliczki na komputery,zwroty pobrań</small></td><td><input type="text" id="zwroty" name="zwroty" onChange="zlicz()" />PLN</td></tr>
            <tr><td>Pobrania z kasy <small>Wszelkie wypłaty z kasy</small></td><td><input type="text" id="pobrania" name="pobrania" onChange="zlicz()" />PLN</td></tr>
            <tr><td>Uwagi</td><td><textarea name="uwagi"></textarea></td></tr>
            <tr><td>Podliczenia końcowe</td></tr>
            <tr><td>W kasie powinno być</td><td><input type="text" name="suma" id="suma" readonly></td></tr>
            <tr><td>W kasie jest</td><td><input type="text" name="taking"></td></tr>
            <tr></tr><tr><td><input type="submit" value="Dodaj roliczenie" /></td></tr>
            </form></table>

Z góry dzięki za pomoc.
Pozdrawaniam Crop


--------------------
Prosty CMS a raczej CMf (zabawa z php)
Go to the top of the page
+Quote Post
sticker
post 1.12.2007, 21:09:48
Post #2





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

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


masz błąd:
  1. var last = document.getElementById(last.value);
  2. //zmień na
  3. var last = document.getElementById("last").value;

analogicznie z resztą, podobnie wpisywanie wartości do inputa


--------------------
Go to the top of the page
+Quote Post
Crop
post 1.12.2007, 21:17:32
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 5.04.2007

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


Teraz kod JS wygląda tak:
Kod
<script type="text/javascript">
                function zlicz()    {
                    var last = document.getElementById("last").value;
                    var subiekt = document.getElementById("subiekt").value;
                    var caffe = document.getElementById("caffe").value;
                    var serwis = document.getElementById("serwis").value;
                    var abonament = document.getElementById("abonament").value;
                    var zwroty = document.getElementById("zwroty").value;
                    var pobrania = document.getElementById("pobrania").value;
                    var suma = last + subiekt + caffe + serwis + abonamenty + zwroty - pobrania;
                    document.getElementById("suma").value = suma;
                }            
            </script>

Jednak Ciągle nie działa:(
Jednak mimo wszystko dziękuje.

Ten post edytował Crop 1.12.2007, 21:37:26


--------------------
Prosty CMS a raczej CMf (zabawa z php)
Go to the top of the page
+Quote Post
sticker
post 1.12.2007, 22:05:19
Post #4





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

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


po
1) zaisntaluj sobie wtyczke firebug masz tam debuger javascriptu
2) Operator + jest przeciążony
3) nie działa bo typ danych pobierany z form jest string nie int czy float.
4) Musisz najpierw zrzutowac typ poznaj metode Integer.parseInt


--------------------
Go to the top of the page
+Quote Post
Crop
post 1.12.2007, 22:08:47
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 5.04.2007

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


OK0 z tym pierwszym kodem już się nie bawie znalazłem coś co działa ale wynik dodawania 12 + 11 = 1211
Oto Kod:
Kod
<script type="text/javascript">
    function zlicz()    {
        document.form.suma.value = document.form.last.value + document.form.subiekt.value + document.form.caffe.value;
    }            
</script>


--------------------
Prosty CMS a raczej CMf (zabawa z php)
Go to the top of the page
+Quote Post
BaN
post 1.12.2007, 22:16:33
Post #6





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


Błędy, które zauważyłem:
  1. Masz żle umieszczony znacznik form, początkowy powinien być przed znacznikiem table, a końcowcowy - po </table>
  2. W funkcji podstawiasz pod zmienną 'abonament' jakąś wartość, a obliczając zmienną 'suma' dodajesz 'abonamenty'
  3. Nawet jeśli to poprawisz, to będziesz miał błąd w obliczeniu tej sumy. Operator '+' służy nie tylko do dodawania liczb ale również do łączenia stringów jak napisał sticker i jak sam zauważyłeś. W funkcji którą podałeś interpreter wykona właśnie połączenie tych wartości a nie dodawanie. Powinieneś zastosować parseInt lub parseFloat w zależności od typu pól
Go to the top of the page
+Quote Post
pafka
post 1.12.2007, 22:17:13
Post #7





Grupa: Zarejestrowani
Postów: 33
Pomógł: 1
Dołączył: 8.01.2005

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


czytaj ze zrozumieniem co miales wczesniej napisane "Musisz najpierw zrzutowac typ poznaj metode Integer.parseInt"

w Twoim przypadku wynik jest jak najbardziej prawidlowy, nastepuje konkatencja stringow ... zebys mial porzadany efekt to kazda wartosc jeszcze zrzutuj ze stringa to inta ... parseInt(document.....value) + parseInt(document.....value) ...
Go to the top of the page
+Quote Post
Crop
post 1.12.2007, 22:37:13
Post #8





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 5.04.2007

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


Czytam ze zrozumieniem...
Gdy zrobiłem wszystko tak jak powiedzieliście to w wyniku otzymuje NaN'a (Not a Number)


--------------------
Prosty CMS a raczej CMf (zabawa z php)
Go to the top of the page
+Quote Post
BaN
post 1.12.2007, 22:48:28
Post #9





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


OK, napisałem odpowiednie funkcje. Wynik powinien być poprawny przy założeniu, że ten formularz jest pierwszym formularzem na tej stronie, jeżeli nie, to zmień pierwszy wiersz w funkcji 'zlicz'. Możesz również usunąć wszystkie identyfikatory z HTML, gdyż w funkcji wykorzystuję tylko nazwy pól
Kod
// zwraca liczbę rzeczywistą lub 0
function float_val(v) {
   v = parseFloat(String(v).replace(',', '.'))
   return isNaN(v) ? 0 : v
}

function zlicz(e) {
   var f=document.forms[0]
   f.suma.value = float_val(f.last.value) + float_val(f.subiekt.value) + float_val(f.caffe.value) + float_val(f.serwis.value) + float_val(f.abonament.value) + float_val(f.zwroty.value) - float_val(f.pobrania.value)
}
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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 22:11