Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js][php] Odczytywanie wartości kilku pól
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
smarcz
Witam! Ponownie mam pytanie.

Jak poradzić sobie z następującym problemem: skrypt php -> generuje formularz z polami input o nazwie wartość. Liczba tych pól jest nieznana i może być powiększana przez użytkownika obsługującego formularz. Dodatkowo pola te są automatycznie wypełniane za pomocą funkcji [js] licz - dlatego ich nazwa ma postać wartosc0, wartosc1 itd...

Teraz problem - chciałbym na końcu podsumować wszystkie pola o nazwie wartość za pomocą JS i wyświetlić wartość podsumowania w osobnym polu. Nie wiem tylko czym pobrać value pól o nazwie wartość:

  1. function oblicz(){
  2. var licz=0;
  3. for(i=0; i<<?=$_SESSION['pol']?>; i++){
  4. var x=document.getElementsByNames("wartosc"+i);
  5.  
  6. licz+=x;
  7. }
  8. alert(licz); //to dla sprawdzenia wykonywania obliczenia
Crozin
Nie
Kod
licz += x;
Tylko
Kod
licz += x.value;
smarcz
Tak, to prawda zgubiłem element x.value ale po wprowadzeniu go nadal mamy błąd. Konsola błędów podaje komunikat - document.getElementsByNames is not a function?

Czemu?
nospor
Cytat
Konsola błędów podaje komunikat - document.getElementsByNames is not a function?

Czemu?
A nie wpadles na pomysl, ze moze dlatego ze nie ma takiej funkcji? Sprawdzales w manualu/dokumentacji js? ja tam nei znalazlem takiej.
Ale moze jakbys uzyl document.getElementsByName() .... tongue.gif
smarcz
Jasne, dziękuję za sprostowanie. Java to dla mnie nieodkryty świat. Posunęliśmy się do przodu. Program zaczyna brać pod uwagę elementy z tabliczy jednak wynikiem jest NaN.
Dołączyłem funckję eval() i wstawiłem atrybut Number na licz licz = Number(licz); aby to obejść ale nadal jest błąd. może dołączę kod mojego skryptu.

1. Nagłówek PHP
  1. <?php
  2.  
  3. if(empty($_SESSION['pol'])){ $_SESSION['pol']=1; }
  4.  
  5. if($_POST){
  6. $_SESSION['pol']++;
  7. }
  8.  
  9. if(empty($_SESSION['produkt'])){ $_SESSION['produkt']=1; }
  10.  
  11. if($_POST['add_p']){
  12. if(empty($_SESSION['produkt'])){ $_SESSION['produkt']=2; }
  13. else{ $_SESSION['produkt']++; }
  14. }
  15. ?>


2. Kod JS
  1. function licz(cena,ilosc,rabat,wartosc){
  2.  
  3. x=cena.value;
  4. x=x.replace(',','.');
  5. x=parseFloat(x);
  6.  
  7. y=ilosc.value;
  8. y=y.replace(',','.');
  9. y=parseFloat(y);
  10.  
  11. var suma = 0;
  12. x = eval(x);
  13. y = eval(y);
  14.  
  15. suma = x * y;
  16.  
  17. if(rabat.value==""){
  18. suma = x * y;
  19. var suma = Number(suma);
  20. suma = Math.round(suma*100)/100;
  21. }else{
  22. r=rabat.value;
  23. r=r.replace(',','.');
  24. r=parseFloat(r);
  25. r = eval(r);
  26. var rabat;
  27. rabat = (x*y*r)/100;
  28. suma = (x*y) - rabat;
  29. suma = Math.round(suma*100)/100;
  30. }
  31.  
  32. wartosc.value = suma;
  33.  
  34.  
  35. }
  36.  
  37. function oblicz(){
  38. var licz=0;
  39. for(i=0; i<<?=$_SESSION['pol']?>; i++){
  40. var x=document.getElementsByName("wartosc"+i);
  41.  
  42. licz += eval(x.value);
  43. var licz = Number(licz);
  44. //licz = 0;
  45.  
  46. var pole = '<input type="text" name="p['+i+']" value="'+licz+'" />';
  47. document.getElementById("pola").innerHTML += pole;
  48. }
  49. alert(licz);
  50.  
  51. }


3. Tabla do wypełnienia:
  1. <form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name="f1" id="f1">
  2. <div id="pola"></div>
  3. <table width="100%" border="1" style="margin-top: 20px;">
  4. <tr>
  5. <td style="width: 25px;">Lp.</td>
  6. <td style="width: 350px;">Produkt</td>
  7. <td style="width: 100px;" align="right">Cena jednost.</td>
  8. <td align="center">Ilość [szt.]</td>
  9. <td align="center">Rabat [%]</td>
  10. <td style="width: 150px;" align="center">Wartość</td>
  11. </tr>
  12. <?
  13. for($i=0; $i<$_SESSION['produkt']; $i++){?>
  14. <tr>
  15. <td align="center"><? $lp = $i+1; echo($lp);?></td>
  16. <td><input style="width: 100%" type="text" name="nazwa_p<?=$i;?>" value="<?=$_POST['nazwa_p'.$i.''];?>"></td>
  17. <td><input style="width: 100%" type="text" name="cena_jed<?=$i;?>" value="<?=$_POST['cena_jed'.$i.''];?>"></td>
  18. <td><input style="width: 100%" type="text" name="ilosc<?=$i;?>" value="<?=$_POST['ilosc'.$i.''];?>" onkeyup="licz(document.f1.cena_jed<?=$i;?>,document.f1.ilosc<?=$i;?>,document.f1.rabat<?=$i;?>,document.f1.wartosc<?=$i;?>)"></td>
  19. <td><input style="width: 100%" type="text" name="rabat<?=$i;?>" value="<?=$_POST['rabat'.$i.''];?>" onkeyup="licz(document.f1.cena_jed<?=$i;?>,document.f1.ilosc<?=$i;?>,document.f1.rabat<?=$i;?>,document.f1.wartosc<?=$i;?>)"></td>
  20. <td><input style="width: 100%" type="text" name="wartosc<?=$i;?>" id="wartosc<?=$i;?>" value="<?=$_POST['wartosc'.$i.''];?>" readonly="readonly"></td>
  21. </tr>
  22. <?}?>
  23. <tr>
  24. <td colspan="5" align="right">Dodaj kolejny produkt:</td>
  25. <td><input style="width: 150px;" type="submit" name="add_p" value="Dodaj kolejny produkt"></td>
  26. </tr>
  27. </table>
  28. <input type="hidden" name="pol" value="<?=$i;?>">
  29. <input style="width: 100%" type="text" name="ddd" onkeyup="oblicz()">
  30. </form>


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Wiem, że nie ładnie jest odpowiadać samemu sobie - ale poprawnym rozwiązaniem jest zastosowanie:

x=document.getElementById("wartosc"+i);

licz = eval(x.value);

Działa! smile.gif

Dzięki za wszelkie podpowiedzi
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.