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

    Problema con swirch case e variabile passata come argomento della funzione

    Metto il condice di esempio che mi da problemi, i case nello switch poi li devo aggiornare con l'algoritimo definito per generale dei risultati calcistici in base a un un mero che indica la forza. Gli alert li ho messi per fare debug, per controllare se i dati vengono inseriti nelle variabili. La funzione visrisultato (ancora da completare) prende da un form i valori inseriti dall'utente, e tramite la funzione Risultato a cui passa l'argomento forza (il valore inserito nel forum) poi lo passa a switch e in base al valore esegue l'algoritmo. Ho provato varie volte ma lo switch non rileva dati nell'argomento Forza (che contiene il valore inserito) e va a finire in default, perch� non trova casi. Con un alert vedo che l'argomento funziona correntamente, il valore viene passato nella funzione, ma per lo Switch non esiste, lo stesso se metto il valore di "Forza" dentro un altra variabile, lo switch non lo vede. Se passo un valore (1,2,3...) con una variabile interna alla funzione invece lo switch funziona. Sto sbagliando qualcosa? E lo switch che non permette di usare gli argomenti di una funzione?

    codice:
    <script>
    function risultato(forza) {
    alert("forza squadra..."+forza);
    var livello = forza;
    var goal;
    var livello = forza;
    alert("livello vedi:"+livello);
    switch (livello) {
    case 0: 
      alert("caso zero");
      break;
      case 1: 
      alert("caso uno");
      goal = 100;
      break;
      case 2: 
      alert("caso due");
      goal = 200;
      break;
      case 3: 
      alert("caso tre");
      goal = 300;
      break;
      default:
       alert("non ho trovato dei casi");
       }
        return goal;
    
    
    
    }
    
    
    function visrisultato() {
    alert("entrato visualizza");
    //risultato(forza1);
    var forza1 = document.getElementById('squadra1forza').value;
    alert("squadra uno forza rilevata..."+forza1);
    var goalsquadra1 = risultato(forza1);
    alert("squadra uno goal segnati:"+goalsquadra1);
    //risultato(forza2);
    var forza2 = document.getElementById('squadra2forza').value;
    alert("squadra due forza rilevata..."+forza2);
    var goalsquadra2 = risultato(forza2);
    alert("squadra due goal segnati..."+goalsquadra2);
    }
    </script>
    Return mi serve per riportare il valore generato da switch nell'altro funziona che stamper� a schermo il risultato.
    Ultima modifica di enricmar; 19-06-2021 a 15:03

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,917
    Stai cercando di confrontare due tipi diversi di dati: nei case stai usando dei valori numerici, mentre gli input del form restituiscono un valore di tipo stringa.

    Non puoi confrontare direttamente questi valori; dovrai usare delle stringhe nei case (case "0", ecc.) oppure, forse meglio, convertire il valore della variabile forza in entrata alla funzione risultato().

    Puoi usare uno dei vari metodi per convertire il valore in numerico, ad esempio puoi fare una cosa del genere:

    codice:
    function risultato(forza) {
        forza = +forza; // Converto il valore in numero
        var goal;
        switch (forza) {
        case 0: 
            break;
         case 1: 
              goal = 100;
              break;
          case 2: 
              goal = 200;
              break;
          case 3: 
              goal = 300;
              break;
          default:
       }
       return goal;
    }
    
    alert(risultato("1")); // output: 100
    Prova e fai sapere.
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web. Ti resta... humm spè
    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

    "Mi son documentato"

  3. #3
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Stai cercando di confrontare due tipi diversi di dati: nei case stai usando dei valori numerici, mentre gli input del form restituiscono un valore di tipo stringa.

    Non puoi confrontare direttamente questi valori; dovrai usare delle stringhe nei case (case "0", ecc.) oppure, forse meglio, convertire il valore della variabile forza in entrata alla funzione risultato().

    Puoi usare uno dei vari metodi per convertire il valore in numerico, ad esempio puoi fare una cosa del genere:

    codice:
    function risultato(forza) {
        forza = +forza; // Converto il valore in numero
        var goal;
        switch (forza) {
        case 0: 
            break;
         case 1: 
              goal = 100;
              break;
          case 2: 
              goal = 200;
              break;
          case 3: 
              goal = 300;
              break;
          default:
       }
       return goal;
    }
    
    alert(risultato("1")); // output: 100
    Prova e fai sapere.
    Funzione, grazie Non ricordavo che i form non rilasciano un valore snumerico. Anche quando input è type="number" - Comunque ho preferito usare le "" invece di convertire in numero, tanto non mi serviva come valore numerico,
    Ultima modifica di enricmar; 19-06-2021 a 18:51

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,917
    Bene.
    Per completezza, la proprietà value dell'oggetto input (di qualsiasi tipo esso sia) restituisce sempre un valore di tipo stringa.
    Un'ulteriore alternativa può essere quella di usare la proprietà valueAsNumber anziché value:
    var forza1 = document.getElementById('squadra1forza').valueAsNu mber;
    Buon proseguimento
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web. Ti resta... humm spè
    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

    "Mi son documentato"

Tag per questa discussione

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