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

    Assegnare value di un input number a una variabile

    Salve, sto cercando di realizzare una cosa credo semplice ma non sta funzionando...
    In sostanza voglio che, immesso un valore in un input type="number", al click su un button, questo sia copiato, per il momento, in un alert()...
    Lo scopo è realizzare una rudimentale calcolatrice utilizzando le assegnazioni di eventi con addEventListener() anziché gli eventi richiamati nei tag HTML...
    Problema è che il valore numerico non arriva a destinazione!
    codice HTML:
    <input type="number" name="primoInt" id="primoInt" />
    <button id="risolvi" class="tasto">=</button>
    codice:
    let primoInt = document.getElementById("primoInt").value;
    document.getElementById("risolvi").addEventListener("click", calcola);
    function calcola() { alert(primoInt); }
    Alert vuoto! Ho provato col parseInt() sul value, ottengo NaN, eppure nel campo number posso immettere soltanto numeri; idem con Number() del value...

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,595
    Ciao. il valore assegnato a primoInt lo stai recuperando ad apertura pagina, per questo potrebbe risultare un valore vuoto dal momento che quel campo in quel momento non è ancora valorizzato.

    Dovresti invece recuperarlo dentro la stessa funzione calcola().
    Hai già provato Forum HTML.it Toolset?
    uno script che ottimizza il layout e le funzionalità del Forum

  3. #3
    Ciao. La funzione si avvia al click su un button, quando il valore è già stato immesso nel campo.
    In ogni caso, spostando il recupero del value nella funzione ottengo un errore:
    Uncaught ReferenceError: Cannot access 'primoInt' before initialization at HTMLButtonElement.calcola

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,595
    Quote Originariamente inviata da Gas75
    La funzione si avvia al click su un button, quando il valore è già stato immesso nel campo.
    Chiaro, ma il valore va recuperato nel momento del click, non all'apertura della pagina dove sarebbe vuoto.

    Quote Originariamente inviata da Gas75
    In ogni caso, spostando il recupero del value nella funzione ottengo un errore:
    Posta lo script modificato, vediamo dove sta l'errore.
    Hai già provato Forum HTML.it Toolset?
    uno script che ottimizza il layout e le funzionalità del Forum

  5. #5
    Allo stato attuale il codice è questo
    codice HTML:
    <input type="number" id="primoInt" class="display" value="0" />
    <select id="operazione" name="operazione" class="tasto">
        <option selected disabled></option>
        <option value="somma">+</option>
        <option value="sottrai">-</option>
        <option value="moltiplica">*</option>
        <option value="dividi">/</option>
    </select><br />
    <input type="number" id="secondoInt" class="display" />
    <button id="risolvi" class="tasto">=</button><br />
    <input type="text" name="risultato" id="uguale" class="display" readonly/>
    codice:
    let primoInt;
    document.getElementById("risolvi").addEventListener("click", calcola);
    
    function calcola() {
        primoInt = document.getElementById(primoInt).value;
    
        if (operazione == "somma") {
            document.getElementById("uguale").value = primoInt;
        }
    }
    In questo caso, dichiarando la variabile globalmente, senza inizializzarla, l'errore è:
    Uncaught TypeError: Cannot read properties of null (reading 'value') at HTMLButtonElement.calcola
    mentre se faccio il let in calcola() ottengo l'errore di mancata inizializzazione, e notare che ho un value="0" nel tag, altro che null!

    La cosa che trovo strana è che con input text funzionerebbe tutto ma rischierei l'immissione di caratteri non numerici.

  6. #6
    Mancavano le virgolette all'id nel getElementById(), ma anche mettendole non cambia granché.

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,595
    Quote Originariamente inviata da Gas75
    codice:
        if (operazione == "somma") {
            document.getElementById("uguale").value = primoInt;
        }
    Fai attenzione, nei moderni browser è possibile, all'interno dello script, riferirsi agli elementi usando direttamente la variabile che corrisponde al valore dell'attributo id.
    Per buona pratica sarebbe meglio non usare tale metodologia, proprio per evitare di fare confusione tra id e nomi delle variabili e perché browser non troppo recenti potrebbero non supportare questo sistema.

    Nel tuo caso hai scritto questa condizione:
    codice:
    if (operazione == "somma") {
      ...
    }
    Ma la variabile operazione fa riferimento all'elemento DOM con tale id., cioè a <select id="operazione" ...>

    Ora, è chiaro che quel confronto di uguaglianza non potrà mai essere verificato. L'elemento operazione infatti non è una stringa.

    Ripeto, sarebbe meglio diversificare i nomi delle variabili dai relativi id, ma ad ogni modo se vuoi usare questo metodo, dovrai piuttosto verificare la proprietà value di quel select.
    Quindi:
    codice:
    if (operazione.value == "somma") {
      ...
    }
    Hai già provato Forum HTML.it Toolset?
    uno script che ottimizza il layout e le funzionalità del Forum

  8. #8
    Giusta osservazione, in realtà nello script operazione è
    codice:
    let operazione = document.getElementById("operazione").value;
    Comunque l'errore residuo era nel fatto che il value dell'input number non era trasformato con Number() e quinl'output era una concatenazione anziché una somma.
    Grazie del supporto, ora funziona tutto.

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