Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z wysyłaniem formularza
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
marrrecki
Witam. Mam zrobiona stronkę z cenami produktów i chciałem zrobić przeliczanie cen netto i brutto poprzez javascript. I pojawił mi sie problem. Ponieważ w formularzu mam wiele pól input o bardzo podobnych nazwach, gdzieś w javascripcie xle mi wszystko widzi.
Tak wyglada mój js:

  1. function doRound(x, places) {
  2. return Math.round(x * Math.pow(10, places)) / Math.pow(10, places);
  3. }
  4.  
  5. function getTaxRate(i) {
  6. return 22;
  7. }
  8.  
  9. function updateGross(i) {
  10. var taxRate = getTaxRate(i);
  11. var grossValue = document.forms["product_list"].cena_+i.value;
  12.  
  13. if (taxRate > 0) {
  14. grossValue = grossValue * ((taxRate / 100) + 1);
  15. }
  16.  
  17. document.forms["product_list"].cena_brutto_+i.value = doRound(grossValue, 4);
  18. }


a tak fragment formularza:

  1. <tr>
  2.  
  3. <td class=ordcont><input type="checkbox" name="selected[0]"></td>
  4. <td class=ordcont>AGDAMILOZ0001</td>
  5. <td class=ordcont>Chłodziarko-zamrażarka AMICA ACZ 3802 ZP</td>
  6. <td class=ordcont><input type="text" name="cena_0" value="1313.6700" onKeyUp="updateGross(0)"></td>
  7. <td class=ordcont><input type="text" name="cena_brutto_0" value="1313.6700" OnKeyUp="updateNet(0)"></td>
  8. <td class=ordcont><input type="text" name="marza_0" value="8.0" size="2" onKeyUp="updateGross(0); updateNet(0);">%</td>
  9. <td class=ordcont><input type="text" name="products_quantity[0]" value="1" size="2"></td>
  10.  
  11. <td class=ordcont>Amica</td>
  12. <td class=ordcont> </td>
  13. </tr>
  14. <script language="javascript"><!--
  15. updateGross(0);
  16. //--></script>
  17.  
  18. <tr>
  19. <td class=ordcont><input type="checkbox" name="selected[1]"></td>
  20. <td class=ordcont>AGDAMILOZ0002</td>
  21.  
  22. <td class=ordcont>Chłodziarko-zamrażarka AMICA ACZ 3702 ZP</td>
  23. <td class=ordcont><input type="text" name="cena_1" value="1182.3300" onKeyUp="updateGross(1)"></td>
  24. <td class=ordcont><input type="text" name="cena_brutto_1" value="1182.3300" OnKeyUp="updateNet(1)"></td>
  25. <td class=ordcont><input type="text" name="marza_1" value="8.0" size="2" onKeyUp="updateGross(1); updateNet(1);">%</td>
  26. <td class=ordcont><input type="text" name="products_quantity[1]" value="1" size="2"></td>
  27. <td class=ordcont>Amica</td>
  28. <td class=ordcont> </td>
  29.  
  30. </tr>
  31. <script language="javascript"><!--
  32. updateGross(1);
  33. //--></script>
  34.  
  35. <tr>
  36. <td class=ordcont><input type="checkbox" name="selected[2]"></td>
  37. <td class=ordcont>AGDAMILOZ0003</td>
  38. <td class=ordcont>Chłodziarko-zamrażarka AMICA ACZ 3602 ZP</td>
  39. <td class=ordcont><input type="text" name="cena_2" value="1084.6700" onKeyUp="updateGross(2)"></td>
  40.  
  41. <td class=ordcont><input type="text" name="cena_brutto_2" value="1084.6700" OnKeyUp="updateNet(2)"></td>
  42. <td class=ordcont><input type="text" name="marza_2" value="8.0" size="2" onKeyUp="updateGross(2); updateNet(2);">%</td>
  43. <td class=ordcont><input type="text" name="products_quantity[2]" value="1" size="2"></td>
  44. <td class=ordcont>Amica</td>
  45. <td class=ordcont> </td>
  46. </tr>
  47. <script language="javascript"><!--
  48. updateGross(2);
  49. //--></script>



Gdzie jest błąd? Czy ktos może mi pomóc?
Cezar708
najlepszym wyjściem byłoby używanie odpowiedniego nadawania identyfikatorów. np:
  1. <td class=ordcont><input type="text" name="cena_1" value="1182.3300" onKeyUp="updateGross(1)" id='cena_1></td>
  2. (...)
  3. <td class=ordcont><input type="text" name="cena_1" value="1182.3300" onKeyUp="updateGross(1)" id='cena_2></td>


i potem odwoływania się do tych pól poprzez
Kod
document.getElementById(id)
marrrecki
zrobiłem tak:
  1. function updateGross(id) {
  2. var taxRate = getTaxRate(i);
  3. var grossValue = document.getElementById(cena_+id);
  4. alert('aaaaaaaaaaa');
  5. }


i nawet to nie działa.
nospor
nie: cena_+id
a: 'cena_'+id
marrrecki
Dzięki. z tym już sobie poradziłem. Teraz mam dwa inne problemy.
  1. function DoKoszyka(f) {
  2. var i = 0;
  3. var n = document.getElementById('rozmiar').value;
  4. var selected = '';
  5. var product_id = '0';
  6. var cena = '0';
  7. var quantity = '0';
  8. for (i = 0; i < n; i++) {
  9. var selected = '';
  10. var product_id = '0';
  11. var cena = '0';
  12. var quantity = '0';
  13. var product_id = document.getElementById('product_id_'+i).value;
  14. var selected = document.getElementById('selected_'+i).value;
  15. var cena = document.getElementById('cena_'+i).value;
  16. var quantity = document.getElementById('products_quantity_'+i).value;
  17. if(selected == 'on'){
  18. alert(product_id + ' ' + selected + ' ' + cena + ' ' + quantity);
  19. }
  20. }
  21. return false;
  22. }

Zgodnie z powyższym kodem okienko alert powinno pojawiać się tylko jeśli wartość selected jest równa 'on', czyli jak zaznacze sobie checkbox w formularzu. Niestety Tak się nie dzieje, nie wiem czemu, ale selected jest cały czas 'on'.

I drugi problem: czy wiecie jak z tego kodu przekazać dane do php żeby wrzucić pobrane wartości do bazy danych?

W tej chwili zrobiłem tak:
  1. xml = new XMLHttpRequest();
  2. xml.open("POST", "manual_new_order.php?action=add_product", true);
  3. xml.send("action=add_product");

i w kodzie php dałem zwykły zapis jakiegoś stringa do pliku, gdy w tablicy POST znajduje się odpowiedni wpis, ale to nie działa. A nawet jakby zadziałało, to i tak muszę dać w tablicy POST dane z formularza,

OK. z pierwszym problemem sobie poradziłem. Zmieniłem
  1. var selected = document.getElementById('selected_'+i).value;

na
  1. var selected = document.getElementById('selected_'+i).checked;

i uwzględniłem zmiane w warunku if.

Pozostał tylko problem z przesyłaniem danych z formularza przez javascript do php.
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.