![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam jestem bardzo początkujący z kwestii javascript jednak jestem zmuszony skorzystać z tego języka i mam pewien problem skrypt który stworzyłem po wielu męczarniach
dodaje kolejne wiersze w fakturze . również oblicza dynamicznie wyniki w poszególnych wierszach jednak nie moge sobie poradzić z podliczeniem całej faktury zrobiłem pętle jednak coś z nią jest nie tak , przerabiałem na kilka sposobów i nie działa: kod html Kod <textarea id="szablon" style="display:none;" cols="1" rows="1"> <tr id="wiersz_{0}"> <td>*</td> <td><input type="text" size="3" name="imie[]"></td> <td><input type="text" size="2" name="nazwisko[]"></td> <td><input type="text" size="2" name="nr" value="odpowiedź domyślna"/></td> <td><input type="text" size="2" id="ilosc{0}" onchange="oblicz({0},\'ilosc\')" name="dataw[]" value="1"/></td> <td><input type="text" size="2" id="cena{0}" onchange="oblicz({0},\'cena\')" name="datax[]" value="1"/></td> <td><input type="text" size="2" id="rabat{0}" name="nr" onchange="oblicz({0},\'rabat\')" value="2"/></td> <td><input type="text" size="2" id="svat{0}" name="svat{0}" onchange="oblicz({0},\'svat\')" value="2"/></td> <td><input type="text" size="2" id="netto{0}" name="netto{0}" onchange="oblicz({0},\'netto\')" value="2"/></td> <td><input type="text" size="2" id="vat{0}" name="vat{0}" onchange="oblicz({0},\'vat\')" value="2"/></td> <td><input type="text" size="2" id="brutto{0}" name="brutto{0}" onchange="oblicz({0},\'brutto\')" value="2"/></td> <td><img src="http://antczak.org/source/dynamic_forms/12.png" id="usunOsobe_{0}" alt="usun"></td> </tr> </textarea> <table id="listaOsob"> <thead> <tr> <th>Lp</th> <th>Towar/Usługa</th> <th>PKWiU</th> <th>J.m.</th> <th>Ilość</th> <th>Cena netto</th> <th>Rabat</th> <th>Stawka Vat</th> <th>Wartość netto</th> <th>Wartość Vat</th> <th>Wartość brutto</th> <th>-</th> </tr> </thead> <tfoot> <tr> <th colspan="4"> <input type="submit" name="wyslij" value="Wyślij"> </th> </tr> </tfoot> <tbody> </tbody> <tdown> </tdown> <img src="http://antczak.org/source/dynamic_forms/11.png" id="dodajOsobe" alt="dodaj"> </table> <tr bgcolor="white"><td>* Pola obowiązkowe</td><td><input type="submit" name="licz" value="Zapisz"/></td><td><input type="submit" name="wroc" value="Anuluj"/></td></tr> </form> kody java i jq: Kod <script type="text/javascript"> $(document).ready(function(){ var i = 1; var szablonWiersza = jQuery.format($("#szablon").val()); var ii = i++; $(szablonWiersza(ii)).appendTo("#listaOsob tbody"); $("#usunOsobe_" + ii).click(function(){ $("#wiersz_" + ii).remove(); }); function dodajWiersz() { var ii = i++; $(szablonWiersza(ii)).appendTo("#listaOsob tbody"); $("#usunOsobe_" + ii).click(function(){ $("#wiersz_" + ii).remove(); }); } $("#dodajOsobe").click(dodajWiersz); }); </script> <script type="text/javascript"> function Round(n, k) { var factor = Math.pow(10, k+1); n = Math.round(Math.round(n*factor)/10); return n/(factor/10); } function oblicz(x,c) { switch { case \'ilosc\': var ilosc = document.getElementById(\'ilosc\' + x).value; var cena = document.getElementById(\'cena\' + x).value; var rabat = document.getElementById(\'rabat\' + x).value; var svat = document.getElementById(\'svat\' + x).value; var netto = document.getElementById(\'netto\' + x).value; var vat = document.getElementById(\'vat\' + x).value; var brutto = document.getElementById(\'brutto\' + x).value; var wnettobezrabatu = (ilosc * cena); var wnetto = wnettobezrabatu - (wnettobezrabatu *(rabat / 100)); var wvat = (wnetto * svat)/100; var wbrutto = Round(wnetto + wvat, 2); document.getElementById(\'netto\' + x).value = wnetto; document.getElementById(\'vat\' + x).value = wvat; document.getElementById(\'brutto\' + x).value = wbrutto; var x = 1; //ustawia zmienna x na 1 zeby zaczelo pobierac od pierwsego wiersza while (x<=5) // dopuki nie pobierze 5 koejnych warosci { var s = document.getElementById(\'netto\' + x); pobiera dane z formularza x++; wynik = s + wynik; //dodaje do wyniku pobraną wartosc } kolumna = document.getElementById(\'sumanetto\'); kolumna.innerHTML = wynik; var dodaj = document.getElementById(\'sumanetto\'); dodaj.appendChild(kolumna); break; case \'cena\': var ilosc = document.getElementById(\'ilosc\' + x).value; var cena = document.getElementById(\'cena\' + x).value; var rabat = document.getElementById(\'rabat\' + x).value; var svat = document.getElementById(\'svat\' + x).value; var netto = document.getElementById(\'netto\' + x).value; var vat = document.getElementById(\'vat\' + x).value; var brutto = document.getElementById(\'brutto\' + x).value; var wnettobezrabatu = (ilosc * cena); var wnetto = wnettobezrabatu - (wnettobezrabatu *(rabat / 100)); var wvat = (wnetto * svat)/100; var wbrutto = wnetto + wvat; document.getElementById(\'netto\' + x).value = wnetto; document.getElementById(\'vat\' + x).value = wvat; document.getElementById(\'brutto\' + x).value = wbrutto; break; case \'rabat\': var ilosc = document.getElementById(\'ilosc\' + x).value; var cena = document.getElementById(\'cena\' + x).value; var rabat = document.getElementById(\'rabat\' + x).value; var svat = document.getElementById(\'svat\' + x).value; var netto = document.getElementById(\'netto\' + x).value; var vat = document.getElementById(\'vat\' + x).value; var brutto = document.getElementById(\'brutto\' + x).value; var wnettobezrabatu = (ilosc * cena); var wnetto = wnettobezrabatu - (wnettobezrabatu *(rabat / 100)); var wvat = (wnetto * svat)/100; var wbrutto = wnetto + wvat; document.getElementById(\'netto\' + x).value = wnetto; document.getElementById(\'vat\' + x).value = wvat; document.getElementById(\'brutto\' + x).value = wbrutto; break; case \'svat\': break; case \'netto\': var ilosc = document.getElementById(\'ilosc\' + x).value; var cena = document.getElementById(\'cena\' + x).value; var rabat = document.getElementById(\'rabat\' + x).value; var svat = document.getElementById(\'svat\' + x).value; var netto = document.getElementById(\'netto\' + x).value; var vat = document.getElementById(\'vat\' + x).value; var brutto = document.getElementById(\'brutto\' + x).value; var wcena = netto / ilosc var wnettobezrabatu = (ilosc * wcena); var wnetto = wnettobezrabatu - (wnettobezrabatu *(rabat / 100)); var wvat = (wnetto * svat)/100; var wbrutto = wnetto + wvat; document.getElementById(\'netto\' + x).value = wnetto; document.getElementById(\'vat\' + x).value = wvat; document.getElementById(\'brutto\' + x).value = wbrutto; document.getElementById(\'cena\' + x).value = wcena; break; case \'brutto\': var ilosc = document.getElementById(\'ilosc\' + x).value; var cena = document.getElementById(\'cena\' + x).value; var rabat = document.getElementById(\'rabat\' + x).value; var svat = document.getElementById(\'svat\' + x).value; var netto = document.getElementById(\'netto\' + x).value; var vat = document.getElementById(\'vat\' + x).value; var brutto = document.getElementById(\'brutto\' + x).value; var wcena = brutto / ((svat/100)+1) var wnettobezrabatu = (ilosc * wcena); var wnetto = wnettobezrabatu - (wnettobezrabatu *(rabat / 100)); var wvat = (wnetto * svat)/100; var wbrutto = wnetto + wvat; document.getElementById(\'netto\' + x).value = wnetto; document.getElementById(\'vat\' + x).value = wvat; document.getElementById(\'brutto\' + x).value = wbrutto; document.getElementById(\'cena\' + x).value = wcena; break; default: } } </script> dodałem momentarze przy pentli która nie działa prosze o pomoc (kod został skrócony ponieważ nie mogłem wysłać posta Chodzi o tą pętle Kod var x = 1; //ustawia zmienna x na 1 zeby zaczelo pobierac od pierwsego wiersza while (x<=5) // dopuki nie pobierze 5 koejnych warosci { var s = document.getElementById(\'netto\' + x).value; //pobiera dane z formularza x++; wynik = s + wynik; //dodaje do wyniku pobraną wartosc } sorki ale pierszy raz korzystam z forum o pomoc zawsze radziłem sobie sam jednak teraz już dwa dni nad tym siedze Ten post edytował predator66611 6.12.2012, 11:43:18 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Widzę kolego, że korzystasz z jQuery, więc zrób tak - dodaj inputom, które ma zliczać (cena netto?) class, może to być np. class="nettoPrice". Teraz wystarczy prosta pętelka.
Funkcję podepnij sobie do jakiegoś zdarzenia on click na początek, żeby zobaczyć jak działa. -------------------- Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
A mógłbyś mi wytłumaczyć tą funkcję
ponieważ nie wiem czy dobrze ją stosuje , bo zwraca mi wartość NaN |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
To pokaż jak stosujesz. Pokaż kod po zmianach
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Kod wstawiłem pod tym kodem kliknięcie obiektu xxx wywołuje otwarcie komunikatu z treścią Nan
netto1 to input gdzie znajduje się wartość do obliczenia Kod <script type="text/javascript"> $(document).ready(function(){ var i = 1; var szablonWiersza = jQuery.format($("#szablon").val()); var ii = i++; $(szablonWiersza(ii)).appendTo("#listaOsob tbody"); $("#usunOsobe_" + ii).click(function(){ $("#wiersz_" + ii).remove(); }); function dodajWiersz() { var ii = i++; $(szablonWiersza(ii)).appendTo("#listaOsob tbody"); $("#usunOsobe_" + ii).click(function(){ $("#wiersz_" + ii).remove(); }); } $("#dodajOsobe").click(dodajWiersz); $("#xxx").click( function (){ var sum; $("#netto1").each(function() { sum += parseFloat($(this).val()); }); alert(sum); }); }); Po długich męczarniach bo od wtorku rana udało mi sie samemu to rozwiązać document.getElementById( \'vat\'+ l ) zwracał wartość null i wywalało skrypt zastosowałem warunek jak poniżej mam tylko dwa pytania wynik += pobrana; ten wers sumuje mi wartości jednak zamiast 1+2+3 = 6 daje wynik 1+2+3 = 123 jak to zmienić ![]() a drugie czy moge w jakiś sposób sprawdzić i przeliczyć ilość rzędów tabeli żeby nie sprawdzać 200 wyników tylko daną ilość ![]() Kod var wynik = 0;
var l=1; while (l<200) { if( ( x =document.getElementById( \'vat\'+ l ) )) { var pobrana = document.getElementById(\'vat\' + l).value;} else{ } wynik += pobrana; pobrana = 0; l++; } wynik; kolumna = document.getElementById(\'xxx\'); kolumna.innerHTML = wynik; |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
JS traktuje Twój wynik jako string, musisz zastosować rzutowanie typu zmiennej.
-------------------- Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 15:24 |