Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    218

    parametri assegnati da tastiera

    Il 1° codice, preso dal Web, con i due parametri p1 e p2 assegnati dal programma stesso, funziona regolarmente.
    Nel 2° codice ho apportato una variante: i due parametri p1 e p2 li assegno da tastiera; non viene segnalato nessun errore, ma il codice non funziona più e dà sempre 0.
    Desidererei sapere perché. Grazie

    lanvoel

    1° codice:
    codice:
    <!DOCTYPE html>
    <html>
    <body>
    <p>Click the button to perform a calculation.</p>
    <button id="myBtn">Try it</button>
    <p id="demo"></p>
    <script>
       let p1 = 5;
       let p2 = 7;
    document.getElementById("myBtn").addEventListener("click", function() {
      myFunction(p1, p2);
    });
       function myFunction(a, b) {
         document.getElementById("demo").innerHTML = a * b;
       }
    </script>
    </body>
    </html>

    2° codice:
    codice:
    <!DOCTYPE html>
    <html>
    <body>
       scrivi due numeri: <br>
       a= <input type="text" id="a" name="a" size=10;>
       b= <input type="text" id="b" name="b" size=10;>
    <p>Click the button to perform a calculation.</p>
    <button id="myBtn">Try it</button>
    <p id="demo"></p>
    <script>
       let p1 =a.value;
       let p2 =b.value;
    document.getElementById("myBtn").addEventListener("click", function() {
      myFunction(p1, p2);
    });
       function myFunction(a, b) {
         document.getElementById("demo").innerHTML = a*b;
       }
    </script>
    </body>
    </html>

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Le due variabili (p1, p2) sono state popolate solo inizialmente (ad apertura pagina) per cui assumono e mantengono il valore iniziale degli input (che sia 0 o altro)

    A meno che non vengano aggiornate nel momento in cui cambia il valore dell'input (possibile farlo attraverso l'evento change dell'input), queste continueranno a mantenere il loro valore assegnatogli inizialmente.
    Per questo, leggendole nella funzione, avranno sempre il valore iniziale e non quello corrente degli input.

    Per ottenere il valore corrente degli input dovresti "aggiornare" in qualche modo le due variabili oppure, molto semplicemente, accedere direttamente alla proprietà value dei due oggetti input anche da dentro la funzione.

    Esempio:
    codice:
    document.getElementById('myBtn').addEventListener('click', e => {
      const primoNumero = +document.getElementById('a').value;
      const secondoNumero = +document.getElementById('a').value;
      myFunction(primoNumero , secondoNumero);
    });



    Tra le altre cose, occhio, qui non ci sta a fare nulla quel punto e virgola:
    codice:
    size=10;>
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    218
    Grazie KillerWorm, anche per il punto e virgola in
    codice:
    size=10;>
    Ancora un particolare: Perchè hai messo il + davanti a document in
    codice:
    const primoNumero =+document.getElementById('a').value;
    Grazie
    lanvoel

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Perdona il ritardo ma ultimamente non sto ricevendo notifiche delle risposte dal forum.
    Rispondo comunque per chiarire.

    Quote Originariamente inviata da lanvoel
    Ancora un particolare: Perchè hai messo il + davanti a document in
    Il + posto davanti ad un valore (una variabile o una qualsiasi espressione che restituisca un valore) non fa altro che convertirne il tipo in numerico.
    Equivale all'uso del metodo Number() ma è una forma più stringata.

    Leggendo la proprietà value di un qualsivoglia elemento HTML (nel caso in easame, il tuo document.getElementById('a').value), si ottiene sempre un valore testuale e non numerico.
    Dal momento che ti serve utilizzare tali valori per effettuare delle operazioni numerice dentro la funzione richiamata di seguito, ho preferito convertirli preventivamente in valori numerici per evitare eventuali successivi problemi di conversione.

    E' vero che l'operatore * (moltiplicazione), usato poi nella funzione, esegue già un auto-casting dei valori stringa per renderli numerici, ma potrei pensare a differenti scenari in cui dentro quella funzione tu vada ad eseguire differenti operazioni. Usando ad esempio l'operatore + tra due valori, la conversione non avrebbe luogo in questo caso; se vengono usate due stringe (ad esempio quei due valori non convertiti in numeri), si otterrebbe una concatenazione di stringhe testuali e non un'addizione tra numeri, perché l'operatore + è utilizzato anche come operatore di concatenazione.

    Per evitare eventuali risultati imprevedibili, penso sia sempre bene trattare i dati secondo lo specifico contesto in cui saranno usati. In questo caso, come spiegato, può essere utile convertirli preventivamente nel tipo più consono (cioè in numero) per evitare che si creino situazioni ambigue a seconda del loro utilizzo.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    218
    Grazie KillerWorm per la esauriente risposta

    lanvoel

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.