Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    funzione javascript per aggiornare un campo

    Cecherò di essere il più chiaro possibile!

    Credo di dover fare una funziona javascript che mi modifichi un campo in base ad altri valori che sono in altri campi.
    Faccio un esempio:
    - Ho un campo num_persone e un campo num_bambini
    -ho poi tanti radio button (ognuno ha una scritto nel value una cifra ad esempio 60)
    ho impostato che prima le persone devono riempire i campi num_persone e num_bambini e solo dopo scelgono il radio button, all'onclick di uno di questi radio button devo chiamarmi una funzione dove passare questi valori (num_persone, num_bambini, radio.value)

    dentro questa funzione devo semplicemente:
    - innanzitutto moltiplicare il valore radio.value (es. 60) per (il num totale di persone + bambini) - Se il num totale di persone è >=3 allora fare uno sconto del 20% sul totale parziale calcolato prima.
    - all'uscita da questa funzione devo avere il valore da stampare in un campo euro.value.

    Essendo poco pratico di javascript riepilogo cosa farei io:
    codice:
    function calcola (radio, num_persone, num_bambini) {
    num_totale=(num_persone + num_bambini);
    parziale= radio * num_totale;
    
    if (num_totale>=3) {
      euro= parziale - (parziale / 100 *20);
      return(euro);
    } else {
      euro=parziale;
      return(euro);
    }
    
    }
    Detto tutto ciò, il mio problema è come scriverlo in maniera corretta!
    qualcuno può darmi una dritta!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Mi pare tutto corretto tranne il return nell'if

    codice:
    function calcola (radio, num_persone, num_bambini) {
    num_totale=(num_persone + num_bambini);
    parziale= radio * num_totale;
    
    if (num_totale>=3) {
      euro= parziale - (parziale / 100 *20);
      document.getElementById("campoeuro").value = euro;
    } else {
      euro=parziale;
     document.getElementById("campoeuro").value = euro;
    }
    
    }
    Nel codice ovviamente faccio riferimento ad un ipotetico campo con id uguale a "campoeuro", questo è solo un esempio si puo fare anche in altri modi...

  3. #3
    Ho provato, ma non fa nulla!
    questo è il codice che uso per richiamarmi la funzione:
    codice:
     
    <input class="nome_voucher" type="radio" name="select" value="7" onclick="calcola(select, num_persone, num_bambini)" />
    invece sul campo che mi deve stampare l'importo che da me si chiama out_euro non ho scritto nulla.
    codice:
     <input style="text-align:right" name="out_euro" size="6" readonly="readonly"/>
    Non so dove possa sbagliare!

  4. #4
    Un piccolo passo è stato fatto..ora il campo mi restituisce però un valore NaN,
    sicuramente mi sta dicendo che non è un numero!

    questo è il codice

    Codice PHP:
    <script language="javascript">
    function 
    calcola (radionum_personenum_bambini) {
    rad parseInt(radio);
    pers parseInt(num_persone);
    bimbi parseInt(num_bambini);
        
    num_totale=(pers bimbi);

    parzialerad num_totale;

    if (
    num_totale>=3) {
     
    eurooparziale - (parziale 100 *20);
      
    document.getElementById("euro").value euroo;
    } else {
      
    euroo=parziale;
     
    document.getElementById("euro").value euroo;
    }
    }
    </script> 
    Dove sbaglio il casting? oppure sto omettendo qualcosa nelle dichiarazioni di variabili?

  5. #5
    dipende da come passi i valori alla funzione

    <input class="nome_voucher" type="radio" name="select" value="7" onclick="calcola(select, num_persone, num_bambini)" />

    select non è nulla, this.value lo sarebbe invece.

    Quanto a num_persone e num_bambini o sono definite prima con scope globale e hanno un valore, o stai passando non devi valori, nè dei riferimenti ad oggetti che detengano un valore, ma dei meri nomi di variabili (indefinite, se non precedentemente inizializzate e assegnate) anzichè dei valori.

    A meno che, intuendo il possibile tipo di "misconception" deducibile dall' argomento select, tu non stia pensando che basti nominare il name di un campo per prenderne il valore: non è così.
    Se hai dei campi con quel name, e appartengono a quella stessa form, li evinci così dall' evento onclick:
    this.form.select.value,
    this.form.num_persone.value,
    this.form.num_bambini.value
    Ora indirizzano un oggetto reale leggendone il valore dal campo value.
    oppure: document.NOMETUAFORM.NOMETUOCAMPO.value (e già che ci siamo, occhio che per i tag <select> non vale)

    Devi tenere presente che per le variabili è come per la più banale delle algebre
    a+b=c
    a=5
    b=2
    solo ora sappiamo che c=7, prima di allora non è niente: è una espressione astratta, esattamente come astratta è la signature di una funzione fuori del suo runtime che gli passi dei valori concreti.

    se passi a e b senza valore alla espressione algebrica c=, anche c non è niente, è senza valore: se passi num_persone e num_bambini non come valori, anche la funzione calcola è senza valori e quindi non fa niente se non che, appunto, sfornarti un errore.

    a+b=c
    in maniera intuitiva (ma non matematica) potresti leggerlo come:
    num_persone(a)+num_bambini(b) return(=) di calcola(c)

    funziona solo se da qualche parte è stato prima stabilito in un qualche modo che:
    num_persone=5
    num_bambini=2
    oppure se passi direttamente i valori
    5 , 2 evvai al return di calcola

  6. #6
    Se hai dei campi con quel name, e appartengono a quella stessa form, li evinci così dall' evento onclick:
    this.form.select.value,
    this.form.num_persone.value,
    this.form.num_bambini.value
    Ora indirizzano un oggetto reale leggendone il valore dal campo value.
    True Lies ho capito cosa vuoi dire, non posso che darti ragione, sulla tua spiegazione ho modificato la funzione, ho pensato quindi di non passare delle variabili passandomele sulla funzione, ma richiamandole direttamente all'interno essendo penso variabili globali.
    Ma purtroppo non funziona, ora nn restituisce nulla, a me dispiace chiederti ulteriori spiegazioni ma non conosco bene la struttura del java.
    Qui sotto c'è la modifica della funzione, tengo a precisare che il nome select_p corrisponde a dei radio button e che tutti questi pulsanti o input name sono all'interno dello stesso form.

    Codice PHP:
    <script language="javascript">
    function 
    calcola () {
    rad this.form.select_p.value;
    pers this.form.num_prenotato.value;
    bimbi this.form.bimbi_prenotato.value;
        
    num_totale=(pers bimbi);

    parzialerad num_totale;

    if (
    num_totale>=3) {
     
    eurooparziale - (parziale 100 *20);
      
    document.getElementById("euro").value euroo;
    } else {
      
    euroo=parziale;
     
    document.getElementById("euro").value euroo;
    }
    }
    </script> 
    cosi invece chiamo la funzione

    Codice PHP:
    <input class="nome_voucher" type="radio" name="select_p" value="7" onclick="calcola()" /> 

  7. #7
    No scusa, perchè hai messo this. dentro la funzione?

    Io avevo detto:

    CITO:
    <input class="nome_voucher" type="radio" name="select" value="7" onclick="calcola(select, num_persone, num_bambini)" />

    select non è nulla, this.value lo sarebbe invece.
    FINE CITO

    cioè mi rierivo al tag - la funzione non la ho toccata

  8. #8
    <input class="nome_voucher" type="radio" name="select_p" value="7" onclick="calcola(this.form.select_p.value, this.form.num_prenotato.value, this.form.bimbi_prenotato.value)" />

    la funzione rimane quella che avevi prima, nemmen la ho guardata quella vedendo che non passi valori reali

    ps non è java questo, ma javascript - i nomi si somigliano ma come roberto somiglia ad alberto: suonano simili, ma arrivano 2 persone completamente diverse :-)

  9. #9
    la funzione rimane quella che avevi prima, nemmen la ho guardata quella vedendo che non passi valori reali
    Ringrazio TrueLies per il tempo che ha impiegato nel spiegarmi cosa sbagliavo.
    Ho risolto il problema, e come mio solito posto il risultato che magari potrà servire a qualcun altro o magari verrà risolto in maniera più elegante:

    cosi mi chiamo la funzione
    codice:
    <input type="radio" name="select" value="1" 
    onclick="calcola(169, this.form.num_prenotato.value, this.form.num_bambini.value)" />
    Questa è funzione calcola:

    codice:
     
    <script language="javascript"> 
    function calcola (rad, pers, bimbi) { 
    rad= eval(rad);
    pers= eval(pers);
    bimbi= eval(bimbi);
        
    num_totale=(pers + bimbi);
    parziale1 = rad * pers;
    
    //applico lo sconto del 50% ai bambini
    parziale2 = ((rad / 2) * bimbi); 
     
    parziale = parziale1 + parziale2;
    
    if (num_totale>=3) { 
      euroo = parziale - ((parziale / 100) * 20);
      euroo = Math.floor(euroo);    
      document.getElementById("euro").value = (euroo); 
    } else { 
      euroo = Math.floor(parziale); 
      document.getElementById("euro").value = (euroo); 
    } 
    } 
    </script>
    Accetto qualsiasi consiglio o critica costruttiva!

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