Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Calcolare i valori tra textfield

    Buongiorno a tutti, io ho un elenco di articoli creati dinamicamente in php e in ogni riga ci sono delle textarea dove c'è prezzo, quantità, sconto e prezzo totale; io vorrei che cambiando i valori tipo del prezzo, mi cambiasse anche il prezzo totale di quell'articolo. Ho provato a fare questa funzioncina ma ovviamente non mi funziona

    function PrezzoArt(id){
    var PrezzoUni;
    var Qta;
    var Sconto;

    PrezzoUni = document.myform.'PREZZO'+id.value;
    document.myform.'Netto'+id.value = PrezzoUni;
    }

    in teoria dovrebbe copiare quello che sta su PrezzoUni sul totale dell'articolo, ma in pratica non fa una cippa.

    ho messo un onKeyUp="PrezzoArt(qui va l'id in automatico)" sul campo del prezzo che ovviamente avrà il nome "PREZZO"+l'id che gli assegno.
    Mi sapreste dire dove toppo?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non puoi comporre il nome in codesto modo.

    Il metodo "vecchio" e` usare eval(), e funziona sui browser fino alla versione 5, mentre il metodo nuovo e` usare getElementsById().

    Pero` trattandosi di campi e` anche possibile usare il vettore elements[] del form:

    function PrezzoArt(idd){
    var PrezzoUni;
    var Qta;
    var Sconto;

    PrezzoUni = document.myform.elements['PREZZO'+idd].value;
    document.myform.elements['Netto'+idd].value = PrezzoUni;
    }

    Nota che ho usato la variabile idd, dato che id potrebbe essere riservata.

    Non entro nel merito del conto, ma alla funzione mancano dei pezzi per fare quello che chiedi (immagino pero` che stai facendo un passo alla volta).

    Io non userei l'evento onKeyXXX, preferirei onBlur, oppure onChange, ma questo puoi vederlo anche dopo.

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    si, infatti sto vedendo pezzo per pezzo, infatti ora ho provato a fare

    PrezzoUni = document.myform.elements['PREZZO'+idd].value;
    Qta = document.myform.elements['QTA'+idd].value;
    document.myform.elements['Netto'+idd].value = (PrezzoUni*Qta);

    solo che sul campo del prezzo totale mi scrive come risultato NaN, che se non sbaglio mi sembra che voglia dire che il risultato non è numerico, ma come mai non mi da un risultato non numerico se PrezzoUni e Qta sono numerici?

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    In realta`, per come li definisci sono stringhe.

    Per trasformarli in numeri puoi usare parseInt() o parseFloat(), a seconda se sono numeri interi o decimali:

    var PrezzoUni = parseFloat(document.myform.elements['PREZZO'+idd].value);
    var Qta = parseInt(document.myform.elements['QTA'+idd].value);
    var Tot = Math.round((PrezzoUni*Qta)*100)/100;
    document.myform.elements['Netto'+idd].value = Tot;

    Ho anche anticipato la tua prossima domanda sull'arrotondamento (ma se ti interessa imparare, non tener conto delle ultime righe e prova prima ad inserire solo parseInt() e parseFloat() ).

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Grazie mille! Ti devo una bevuta al bar :gren:
    un'ultima cosa, ma per arrotondare alle 2 cifre? con Math.round mi fa vedere numeri tipo 74.299000002

  6. #6
    niente, ho risolto, sbagliavo io in un'operazione, ma ancora una cosa devo chiedere, per far apparire il numero invece di 15.25 vorrei usasse la "," per i decimali, ovvero diventasse 15,25 , è una cosa fattibile?

  7. #7
    poi ho notato che il Math.round i numeri tipo 150.00 li fa diventare 150 togliendo i 2 zeri, oppure 150.10 diventa 150.1, io invece dovrei mantenere gli ultimi 2 decimali (colpa dell'euro)

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Si fa tutto con una semplice aggiunta.

    Ma si deve lavorare sul numero convertito in stringa.

    var Tot = Math.round((PrezzoUni*Qta)*100)/100;
    var Tots = String(Tot);
    var posv = Tots.indexOf(".")
    if(posv < 0) Tots += ",00";
    else switch (Tots.length-posv) {
    case 1:
    Tots += "0";
    case 2:
    Tots += "0";
    default:
    Tots = Tots.replace(/\./, ",");
    }

    document.myform.elements['Netto'+idd].value = Tots;


    Spero che funzioni: fa un uso "ardito" dello switch.

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  9. #9
    uhm, funziona se il risultato è 12 mi scrive 12,00, se è 12.1 mi scrive 12,10, ma se invece è tipo 12.34 mi scrive 12,00, mumble:master:

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Sei sicuro?

    Metti un alert prima della conversione e ricontrolla, per favore:

    var Tot = Math.round((PrezzoUni*Qta)*100)/100;
    alert("sto per convertire "+Tot);
    var Tots = String(Tot);
    var posv = Tots.indexOf(".")
    if(posv < 0) Tots += ",00";
    else switch (Tots.length-posv) {
    case 1:
    Tots += "0";
    case 2:
    Tots += "0";
    default:
    Tots = Tots.replace(/\./, ",");
    }

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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 © 2024 vBulletin Solutions, Inc. All rights reserved.