Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js][php] Obliczenia matematyczne - dodawanie pola
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
smarcz
Witam! Mam taki problem: chciałbym napisać skrypt, który w locie obliczał by dane liczbowe w formularzu. Formularz ten składa się z trzech sekcji (pól input) np:
1.) Cena
2.) Zakup
3.) Koszty

Pole input 1 i 2 są stałymi, ale input z pola 3 można dodawać w zależności od sytuacji. Dodawanie nowego pola input odbywa się za pomocą php.

Jak napisać skrypt JS który obliczał by właściwie wypełnione pola input niezależnie od ilości dodanych nowych pól o nazwie koszty.

Dla stałych 3 parametrów potrafię napisać skrypt. Gorzej jeżeli idzie o dodatkowe pola input w dziale koszty.
Dodam, że pole koszty zbudowałem w sposób <input type="text" name="koszty[1]"> w zależności od dodanej liczby pól liczba w nawiasie się zmienia o 1 dla każdego kolejnego pola.

Jak napisać funkcję licz() obliczającą dane i wypisującą w dodatkowym polu input??

Dziękuję:)
lord_t
Podpowiedź:)
  1. function licz()
  2. {
  3. var x=document.getElementsByName('box');
  4. var suma=0;
  5. for(i=0;i<x.length;i++)
  6. suma+=parseFloat(x[i].value);
  7. alert(suma);
  8. }
  9.  
  10.  
  11. <div onclick="licz()">Licz</div>
  12. <input type="text" name="box">
  13. <br>
  14. <input type="text" name="box">
  15.  
  16. <input type="text" name="box">


(Dla JS znaczniki script powinny mieć odpowiednie atrybuty, ale nie chciało mi się ich pisać)
smarcz
OK! Zrobiłem coś takiego na podstawie przedstawionej podpowiedzi. Ale czemu to nie działa pod Firefoxem a tylko i jedynie pod Explorerem??
  1. function licz()
  2. {
  3. var x=document.getElementById('cena');
  4. var y=document.getElementById('sprzedaz');
  5.  
  6. x = parseFloat(x.value);
  7. y = parseFloat(y.value);
  8.  
  9.  
  10. var k=document.getElementsByName('box');
  11. var licz=0;
  12. for(i=0;i<k.length;i++){
  13. licz+=parseFloat(k[i].value);
  14. }
  15. var suma = 0;
  16. suma = y - x - licz;
  17. //alert(suma);
  18.  
  19. maska = /^\d+$/;
  20. if (maska.test(y)) {
  21. dochod.value = suma;
  22. } else {
  23. dochod.value="";
  24. }
  25. }
  26.  
  27.  
  28. <div onclick="licz()">Oblicz <input type="text" name="dochod"></div>
  29.  
  30.  
  31. <input type="text" name="sprzedaz" id="sprzedaz">Sprzedaz<br>
  32. <input type="text" name="cena" id="cena" onkeyup="licz()">Zakup<br>
  33.  
  34. <input type="text" name="box" onkeyup="licz()">Koszt
  35. <br>
  36. <input type="text" name="box" onkeyup="licz()">Koszt
  37. <br>
  38. <input type="text" name="box" onkeyup="licz()">KOszt<!--Ostatni wiersz powinien zawierać zdarzenie onkeyup-->


Kurde nie mam pojęcia!?
ferr
Jak nie dziala w FF to z reguly konsola bledow pokazuje co i jak jest zle, nieprawdaz?
smarcz
Konsola błędów podaje ze dochod jest niezdefiniowany?? Kurcze i co zrobić aby w to pole wpisywał się wynik obliczeń??
revyag
Dodaj:
Kod
var dochod=document.getElementById('dochod');


Zmień
  1. <input type="text" name="dochod" />

na
  1. <input type="text" name="dochod" id="dochod" />


Odwołuj się poprzez id. Teraz robisz to przez zmienną globalną którą rozumie tylko ie. Takie praktyki są niewskazane.
smarcz
Bardzo dziękuję za odpowiedź. W między czasie zrobiłem coś takiego. Dodatkowo dołączyłem system poprawy przecinka "," na kropkę "." aby poprawnie wypełniać pola.

Z podpowiedzi zaraz skorzystam smile.gif. Tymczasem mój kod:
  1. function licz(dochod)
  2. {
  3. var x=document.getElementById('cena');
  4. var y=document.getElementById('sprzedaz');
  5.  
  6. l=x.value;
  7. l=l.replace(',','.');
  8. l=parseFloat(l);
  9.  
  10. r=y.value;
  11. r=r.replace(',','.');
  12. r=parseFloat(r);
  13.  
  14.  
  15. var k=document.getElementsByName('box');
  16. var licz=0;
  17. for(i=0;i<k.length;i++){
  18.  
  19. z=k[i].value;
  20. z=z.replace(',','.');
  21. z=parseFloat(z);
  22.  
  23. licz+=z;
  24. }
  25. var suma = 0;
  26. suma = r - l - licz;
  27. //alert(suma);
  28.  
  29. dochod.value = suma;
  30.  
  31.  
  32. }
  33.  
  34. <form name="f1">
  35. <div onclick="licz(document.f1.dochod)">Licz </div>
  36. <input type="text" name="dochod"><br>
  37.  
  38. <input type="text" name="sprzedaz" id="sprzedaz">Sprzedaz<br>
  39. <input type="text" name="cena" id="cena" >Zakup<br>
  40.  
  41. <input type="text" name="box" >
  42. <br>
  43. <input type="text" name="box" >
  44.  
  45. <input type="text" name="box" onkeyup="licz(document.f1.dochod)"><!--Ostatni wiersz powinien zawierać zdarzenie onkeyup-->
  46. </form>



A to ten sam skrypt z wykorzystaniem podpowiedzi. Serdeczne dzięki smile.gif

  1. function licz(dochod)
  2. {
  3. var x=document.getElementById('cena');
  4. var y=document.getElementById('sprzedaz');
  5. var dochod=document.getElementById('dochod');
  6.  
  7. l=x.value;
  8. l=l.replace(',','.');
  9. l=parseFloat(l);
  10.  
  11. r=y.value;
  12. r=r.replace(',','.');
  13. r=parseFloat(r);
  14.  
  15.  
  16. var k=document.getElementsByName('box');
  17. var licz=0;
  18. for(i=0;i<k.length;i++){
  19.  
  20. z=k[i].value;
  21. z=z.replace(',','.');
  22. z=parseFloat(z);
  23.  
  24. licz+=z;
  25. }
  26. var suma = 0;
  27. suma = r - l - licz;
  28. //alert(suma);
  29.  
  30. dochod.value = suma;
  31.  
  32.  
  33. }
  34.  
  35. <form name="f1">
  36. <div onclick="licz()">Licz </div>
  37. <input type="text" name="dochod" id="dochod"><br>
  38.  
  39. <input type="text" name="sprzedaz" id="sprzedaz">Sprzedaz<br>
  40. <input type="text" name="cena" id="cena" >Zakup<br>
  41.  
  42. <input type="text" name="box" >
  43. <br>
  44. <input type="text" name="box" >
  45.  
  46. <input type="text" name="box" onkeyup="licz()"><!--Ostatni wiersz powinien zawierać zdarzenie onkeyup-->
  47. </form>
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.