Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 26

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    34
    Quote Originariamente inviata da autsel Visualizza il messaggio
    Per calcolare il totale di tutte le righe lo fai con un ciclo for del contatore e non ci sono problemi.
    Se ti si blocca probabilmente non hai decrementato il contatore quando elimini una riga.
    Apri la console (F12) e vedi che errore c'è, perché se si blocca un errore c'è di sicuro.
    Se non ci riesci postami il codice che calcola il totale e l'errore della console.
    Questo è l'errore: Uncaught TypeError: Cannot read property 'value' of null

    Ho decrementato, ma forse non in modo corretto, ti posto sia la funzione di eliminazione che quella del totale

    codice HTML:
    function rimuovi(n) {    
    cont--;        
    var rimuoviRiga = document.getElementById("riga"+n);    
    rimuoviRiga.remove();    
    }
    
    function calcolaFattura() { 
    var totCont = cont + 1;var totaleFattura = 0;
        for (i=0; i<=cont; i++ ) {     
             var totImportoId = parseFloat(document.getElementById("totale"+i).value);
             totaleFattura = totaleFattura + totImportoId;    
        }
    
    document.getElementById("totaleFattura").value = totaleFattura;
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    34
    qualche consiglio?

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    residenza
    Brescia
    Messaggi
    81
    Non ho capito : var totCont = cont + 1;
    A cosa serve ?

    L'errore che ti esce è perché non trova l'oggetto indicato "totale"+i.
    Ti spiego l'errore, poi ragionaci su come correggerlo, è un problema di logica.

    Mettiamo che hai 30 righe e rimuovi la 24, avrai si 29 righe, ma avrai un "buco" negli oggetti del tipo...

    ...
    totale20
    totale21
    totale22
    totale23
    totale25
    totale26
    ...

    Come noti manca totale24.... ecco dove si blocca :-)

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    34
    Quote Originariamente inviata da autsel Visualizza il messaggio
    Non ho capito : var totCont = cont + 1;
    A cosa serve ?

    L'errore che ti esce è perché non trova l'oggetto indicato "totale"+i.
    Ti spiego l'errore, poi ragionaci su come correggerlo, è un problema di logica.

    Mettiamo che hai 30 righe e rimuovi la 24, avrai si 29 righe, ma avrai un "buco" negli oggetti del tipo...

    ...
    totale20
    totale21
    totale22
    totale23
    totale25
    totale26
    ...

    Come noti manca totale24.... ecco dove si blocca :-)
    sinceramente non so se ho capito ciò che mi hai suggerito, ma al momento ho trovato una soluzione semplicemente "sottraendo" il totale del valore che elimino aggiungendo l'operazione alla funzione 'rimuovi(n)':
    var togli = document.getElementById("totale"+n).value; var totale = document.getElementById("totFattura").value;
    var totFatturaNuovo = totale - togli;
    document.getElementById("totFattura").value = totFatturaNuovo;
    Sto finendo di testarlo, ma per ora sono soddisfatto del risultato , grazie mille per lo spunto!

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    34
    Ora per� ho notato un altro problema, dato che i valori li devo inviare al database tramite php ho creato dei name utilizzando l'indice che si auto-incrementa, cos� come gli id. Quando vado a eliminare una riga, l'indice non si aggiorna e se aggiungo una nuova riga ottengo due indici uguali, faccio un esempio:

    totale20
    totale21
    totale22
    totale24

    totale23
    totale25

    elimino totale24 e ottengo:

    totale20
    totale21
    totale22

    totale23
    totale25




    aggiungo una riga e ottengo:

    totale20
    totale21
    totale22

    totale23
    totale25
    totale25

    l'ultimo indice si duplica, cosi da avere due input con lo stesso nome, cosa che devo evitare visto che devo salvare i dati nel DB, come posso risolvere?

    Questo influisce purtroppo anche sul calcolo del risultato della fattura, probabilmente il decremento del cont è sbagliato

    Grazie mille
    Ultima modifica di AsevenX; 14-10-2016 a 02:51

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2002
    residenza
    Brescia
    Messaggi
    81
    Io suggerirei....
    quando decrementi il contatore con cont--,
    fai un ciclo for che inizia dall'ìid dell'elemento eliminato e cambi l'attributo id di tutti gli elementi
    sucessivi decrementando l'id di 1... così non devi fare altre modifiche...

    totale22
    totale23
    totale24
    totale25
    totale26
    ...
    Elimino elemento 24:
    totale22
    totale23

    totale25
    totale26
    Reimposto l'attributo id degli elementi a partire da 24+1.
    totale22
    totale23

    totale24 (25-1)
    totale25 (26-1)

    Ovviamente non solo l'attributo del totale, ma di tutti i campi della riga

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    34
    Quote Originariamente inviata da autsel Visualizza il messaggio
    Io suggerirei....
    quando decrementi il contatore con cont--,
    fai un ciclo for che inizia dall'�id dell'elemento eliminato e cambi l'attributo id di tutti gli elementi
    sucessivi decrementando l'id di 1... cos� non devi fare altre modifiche...

    totale22
    totale23
    totale24
    totale25
    totale26
    ...
    Elimino elemento 24:
    totale22
    totale23

    totale25
    totale26
    Reimposto l'attributo id degli elementi a partire da 24+1.
    totale22
    totale23

    totale24 (25-1)
    totale25 (26-1)

    Ovviamente non solo l'attributo del totale, ma di tutti i campi della riga
    Tu dici un ciclo for nella funzione che elimina la riga, quindi da n (che sarebbe l'attributo che passo attraverso il richiamo della funzione). A che valore dovrei far terminare il ciclo?

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2002
    residenza
    Brescia
    Messaggi
    81
    il ciclo deve durare da n che è il valore che passi alla funzione fino a cont (se decrementi cont dopo il ciclo) o fino a cont+1 se lo decrementi prima

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    34
    Ho creato un campo input di controllo e modificato il value dal ciclo for per avere a video il valore esatto ma continua a duplicare i valori se elimino due righe

    il ciclo for è il seguente:
    for (i=n; i<=cont; i++) { document.getElementById("id"+i).value = i-1;
    }
    ti lascio tutto il codice js così magari gli dai un occhiata e vedi se c'è qualcosa di sbagliato
    codice HTML:
    <!-- javascript per le prestazioni -->
    <script language="javascript">
    <?php
            if($actionGet=='update')
                $cont = $contServizi;
            else
                $cont = 0;
    ?>
    var cont = <?php echo $cont?>;
        
    function selezionaImporto(id)
    {   
        var idSelect = document.getElementById("prestazione"+id).value;
        var importo = document.getElementById("importo"+id);
        
        document.getElementById("selectValue"+id).value=idSelect;
        
        <?php
        $quary = "SELECT id, importo FROM $tablePrestazioni";
        if ($result = mysqli_query($mysqli_connect, $quary))
        {
            while ($row = mysqli_fetch_array($result))
            {
                ?>
                importoDB = "<?php print $row[0] ?>";
                importoSel = "<?php print $row[1] ?>";
                
                if (importoDB == idSelect)
                    importo.value = importoSel;
                <?php
            }        
        }
        ?>        
        calcolaQuantita(id);
    }
    function calcolaQuantita(id)
    {
        var qnt = document.getElementById("qnt"+id).value;
        var importo = document.getElementById("importo"+id).value;
        var totImporto = qnt * importo;
        var totImporto = totImporto = totImporto.toFixed(2);
        document.getElementById("totale"+id).value = totImporto;
    }
    function aggiungi() {
        cont++;
    
    
        var newForm= "<div id='riga"+cont+"'>";
        newForm+= "<div><label>Prestazione + "+cont+"</label><select id='prestazione"+cont+"' name='prestazione[]' onchange='javascript:selezionaImporto("+cont+"); javascript:calcolaFattura();'>";
        newForm+= "<option selected></option>";
        newForm+= "<?php if ($result = mysqli_query($mysqli_connect, $sqlPrestazioni)){ while ($row = mysqli_fetch_array($result)){ echo '<option value='.$row[0].'>'.$row[1].'</option>';}} ?>";
        newForm+= "</select><span class='formHelp'>seleziona un opzione</span></div>";
        newForm+= "<div><input type='text' id='id"+cont+"' disabled value='"+cont+"'></div>";    
    
    
        newForm+= "<div><input type='text' id='selectValue"+cont+"' disabled class='none'></div>";
        newForm+= "<div><label>Importo Lordo</label><input type='text' id='importo"+cont+"' name='importo[]' pattern='^[0-9.]{0,5}$' onkeyup='javascript:calcolaQuantita("+cont+"); javascript:calcolaFattura();' required><span class='formHelp'>importo della prestazione</span></div>";
        newForm+= "<div><label>Quantità</label><input type='text' id='qnt"+cont+"' name='quantita[]' value='1' onkeyup='javascript:calcolaQuantita("+cont+"); javascript:calcolaFattura();' pattern='^[0-9]{1,}$' required><span class='formHelp'>inserisci la quantità</span></div>";
        newForm+= "<div><label>Importo netto</label><input type='text' id='totale"+cont+"' name='totale[]' pattern='^[0-9.]{1,}$' required readonly>";
        newForm+= "<a class='add add_remove' onClick='javascript:rimuovi("+cont+");'><img src='../css/img/remove.png'></a>";
        newForm+= "<a class='add add_remove' onClick='javascript:aggiungi();'><img src='../css/img/add.png'>&nbsp;</a></div>";   
        newForm+= "<div><br/></div></div>";
        
       $('#riga').append(newForm); 
    }
    function calcolaFattura() { 
        var totFattura = 0;
        var totRighe = '';
        var i;    
        for (i=0; i<=cont; i++) {
            
            var totImportoLoop = parseFloat(document.getElementById("totale"+i).value);
            if(i >= 0) {
                totFattura += totImportoLoop;
                totRighe += i+"+";
            }
        }
        document.getElementById("totFattura").value = totFattura.toFixed(2);
        //document.getElementById("totRighe").value = totRighe;
    }
    function rimuovi(n) {
        for (i=n; i<=cont; i++) {
            document.getElementById("id"+i).value = i-1;
        }
        
        cont--;
        
        var togli = document.getElementById("totale"+n).value;
        var totale = document.getElementById("totFattura").value;
        var totFatturaNuovo = totale - togli;
        document.getElementById("totFattura").value = totFatturaNuovo.toFixed(2);
        
        var rimuoviRiga = document.getElementById("riga"+n);
        rimuoviRiga.remove();        
    }
    </script>

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2002
    residenza
    Brescia
    Messaggi
    81
    codice:
    function rimuovi(n) {
        var togli = document.getElementById("totale"+n).value;
        var totale = document.getElementById("totFattura").value;
        var totFatturaNuovo = totale - togli;
         document.getElementById("totFattura").value = totFatturaNuovo.toFixed(2);
         var rimuoviRiga = document.getElementById("riga"+n);
         rimuoviRiga.remove();
    
        for (i=n+1; i<=cont; i++) {
            document.getElementById("prestazione"+i).setAttribute("id", i-1);
            document.getElementById("id"+i).setAttribute("id", i-1);
            document.getElementById("importo"+i).setAttribute("id", i-1);
            document.getElementById("qnt"+i).setAttribute("id", i-1);
            document.getElementById("selectValue"+i).setAttribute("id", i-1);
            .... ecc ecc..... per tutti i campi della riga
           
           document.getElementById("prestazione"+i).setAttribute("onkeyup","javascript:calcolaQuantita("+(i-1)+");";
           .... ecc eccc... per tutti gli eventi, compreso calcola
    
    
        }
        
        cont--;
        
            
               
    }
    
    potrebbe esserci qualche errore nella sintassi... ho scritto di fretta... però il concetto è questo....
    Ultima modifica di autsel; 15-10-2016 a 11:14

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.