Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] Dodawanie pól formularza
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Crop
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
sticker
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
Crop
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.
sticker
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
Crop
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>
BaN
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
pafka
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) ...
Crop
Czytam ze zrozumieniem...
Gdy zrobiłem wszystko tak jak powiedzieliście to w wyniku otzymuje NaN'a (Not a Number)
BaN
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)
}
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.