Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Problem z podsumowaniem faktury
Forum PHP.pl > Forum > Przedszkole
predator66611
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
b4rt3kk
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.

  1. function sum() {
  2.  
  3. var sum;
  4.  
  5. $('.nettoPrice').each(function() {
  6. sum += parseFloat($(this).val());
  7. });
  8.  
  9. alert(sum);
  10.  
  11. }


Funkcję podepnij sobie do jakiegoś zdarzenia on click na początek, żeby zobaczyć jak działa.
predator66611
A mógłbyś mi wytłumaczyć tą funkcję

ponieważ nie wiem czy dobrze ją stosuje , bo zwraca mi wartość NaN

nospor
To pokaż jak stosujesz. Pokaż kod po zmianach
predator66611
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ćquestionmark.gif?

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śćquestionmark.gif?


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;
b4rt3kk
JS traktuje Twój wynik jako string, musisz zastosować rzutowanie typu zmiennej.

  1. wynik += parseInt(pobrana);
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.