Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sumowanie formularza - automatyczne
Forum PHP.pl > Forum > Po stronie przeglądarki
Thuunder
Mam problem z dodawaniem danych w formularzu. Opis tego co chcę zrobić poniżej.
Cytat
insert1 * stala1 = wynik1
insert2 * stala2 = wynik2 itp.
    (itd.)
suma = (wynik1 + wynik2 itp.)

stala jest juz w polu input a do wprowadzenia jest insert, wynik - iloczyn inserta i stałej

Chcę, żeby po w wpisaniu byle którego pola i po przejsciu do drugiego pola wyliczył mi się iloczyn oraz końcowa suma wyników. Używam zdarzenia onChange.

  1. function sprawdz(){
  2.  
  3.  for ( i=0;i>document.kalkulator.elements.length;i++) {
  4.   document.kalkulator.wynik[i].value = document.kalkulator.insert[i].value * document.kalkulator.stala[i].value
  5.  
  6.  }
  7. }


Nie wiem czemu mi nie działa i jak to zrobić. Próbowałem zamiast document.kalkulator.elements użyć cyfy np. 10 ale też mi nie działa. Może ktoś będzie wiedział w czym jest problem...
z góry dzięki dry.gif
Vogel
  1. for ( i=0;i>document.kalkulator.elements.length;i++) {


przeanalizuj to...
Thuunder
niestety już to analizowałem winksmiley.jpg Pewnie chodzi Ci o to że i<... ?
Ale nawet jeśli bym to zmienił np na 10 to i tak nie działa...
revyag
Przecież ta pętla nie wykona się ani razu. Weź se popatrz dokładnie.
i = 0 , i nie jest większe od document.kalkulator.elements.length, bo jest równe 0, więc koniec pętli.
Thuunder
Zgadza się kombinowałem i podałem ostatnią moją kombinację. Ale tak czy tak to nie działa! I to nie w tym jest problem, bo jak się zmieni tak jak pisałem wyżej np. i<10 to i tak nie działa więc coś innego jest źle dry.gif

Ten kod wywala mi błąd
Kod
function sprawdz(){


for ( i=0;i<document.kalkulator.elements.length;i++) {
  document.kalkulator.wynik[i].value = document.kalkulator.insert[i].value * document.kalkulator.stala[i].value

}


Cytat
dokument.kalkulator.wynik jest pusty lub nie jest obiektem


w sumie dziwnie bo nie powinno być wynik bo jest wynik1, wynik2 itp.
revyag
1. Pokaż kod forumularza.
2. Po pętli zrób alert(document.kalkulator.wynik[i].value); Co wyświetla ?
Thuunder
nic mi nie wyświetla...

a kod to
  1. <?php
  2. print "<tr height=25>
  3. <td width=\"325\" class=\"tekst\">&nbsp; $nazwa</td>
  4. <td width=\"30\" class=\"tekst\">&nbsp;$miara</td>
  5. <td width=\"65\" class=\"tekst\"><input type=\"text\" name=\"insert$id_calc\" size=\"9\" class=\"calc1\" value=\"\" onChange=\"javascript:sprawdz()\"></td>
  6. <td width=\"10\" class=\"tekst\" align=\"right\">x</td>
  7. <td width=\"60\" class=\"tekst\" align=\"right\"><input type=\"text\" name=\"stala$id_calc\" size=\"6\" class=\"calc2\" value=\"$cena\" disabled> zł =</td>
  8. <td width=\"65\" class=\"tekst\"><input type=\"text\" name=\"wynik$id_calc\" size=\"9\" class=\"calc1\" value=\"\"></td></tr>";
  9. ?>


z tym,że w źródle jest wszystko ok wynik1 wynik2 itp.

a ten formularz wypisuję z bazy ... stałe są z bazy
revyag
1. W kodzie który podałeś nie widzę znaczników rozpoczynających i kończących formularz ? Nie podałeś ich czy ich nie ma questionmark.gif
<form name="kalkulator"></form> masz to ?
2. Masz źle skonstruowane odwoływanie się do do elementów.
Można to zrobić o wiele prościej.

Kod
<script type="text/javascript">
function sprawdz(iid) {
    
    num = iid.charAt(iid.length - 1);
    
    document.getElementById("wynik"+num).value =
    parseInt(document.getElementById("insert"+num).value) * parseInt(document.getElementById("stala"+num).value);
}

</script>


i taka konstrukcja formularza (przykład -> Ty musisz wstawić to swoje dane:)):
  1. <form name="kalkulator" action="" method="post">
  2. stała1:<input type="text" id="stala1" name="stala1" value="5" />
  3. insert1:<input type="text" id="insert1" name="insert1" onkeyup="sprawdz(this.name)" />
  4. wynik1:<input type="text" id="wynik1" name="wynik1" /><br /><br />
  5. stała2:<input type="text" id="stala2" name="stala2" value="6" />
  6. insert2:<input type="text" id="insert2" name="insert2" onkeyup="sprawdz(this.name)" />
  7. wynik2:<input type="text" id="wynik2" name="wynik2" /><br /><br />
  8. stała3:<input type="text" id="stala3" name="stala3" value="7" />
  9. insert3:<input type="text" id="insert3" name="insert3" onkeyup="sprawdz(this.name)" />
  10. wynik3:<input type="text" id="wynik3" name="wynik3" />
  11. </form>


Zasada działania jest prosta. Pobierany jest name inputa (może być id jak kto woli) i na podstawie tego obliczana jest wartość z konkretnych inputów.
Dodałem do inputów atrybuty id. Dzięki temu skrypt jest prostszy, nie trzeba za każdym razem robić pętli.
Thuunder
Mam ale trochę wyżej było nad kwerendą i myślałem,że się domyślisz winksmiley.jpg

Dlaczego zmienno przecinkowych nie chce przeliczać ? (2.5 x 25 = 50)
Dodam, że z js nie miałem za dużo do czynienia :]
revyag
zamiast parseInt daj parseFloat
Thuunder
Dzięki wielkie winksmiley.jpg
zork
po dłuższej walce, przemyśleniach, googlaniu itd
wypracowałem w oparciu o klik
Kod
function getElementsByType(type)
{
var eltsType = new Array();
var elts = document.getElementsByTagName('input');
for (var n = 0; n < elts.length; ++n) {
if (elts[n].getAttribute('type') && elts[n].getAttribute('type') == title) {
eltsType.push(elts[n]);
}
}
return eltsType;
}

function a_plus_b(form) {
var inputCollection = getElementsByType("text");
var sum=0;
for (var i=0; i<inputCollection.length; i++) {
sum=(+sum)+(+inputCollection[i].value);
}
var bazowo='161000.00'

sumatotal=(+sum)+(+bazowo)

form.kosztogolny.value = sumatotal
}


skrypt sumuje zawartości wszystkich inputów typu text smile.gif wynik podaję w polu textarea.
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.