Associare elemento input/submit ad un codice Javascript

di il
7 risposte

Associare elemento input/submit ad un codice Javascript

Ciao a tutti!
Sto cercando di creare il mio primo umilissimo progettino:
Una pagina web, che grazie a javascript sceglie randomicamente una risposta, ad una eventuale domanda data.
Solo che ho un piccolo inconveniente. L'alert nel codice javascript, compare solamente quando ricarico la pagina nel browser e non quando premo il tasto "Chiedi" che si trova nel file html. Ed ovviamente io ho bisogno che compaia quando si preme il tasto "Chiedi".

Sicuramente la soluzione sarà banale, ma non riesco a venirne a capo, anche a cercare qualche situazione analoga sul web.

Ora vi mostro i codici HTML e JavaScript.
<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>La Sfera Magica</title>
    <script type="text/javascript" src="./eightball.js"></script>
    <link href="eightball.css" type="text/css" rel="stylesheet">
</head>
<body>
    <h1>PREVEDI IL TUO FUTURO </h1>
        <p>..poni una domanda..</p>

    <forms>
        <input type="text" name="question" id="question" required>
        <input type="submit" value="Chiedi.." id="submit">
    </form>
</body>
</html>
let eightBall = '';

let randomNumber = Math.floor(Math.random() * 8);


switch (randomNumber){
  case 0:
    eightBall = "E' sicuro!";
    break;
  case 1:
    eightBall = "E' decisamente così!";
    break;
  case 2:
    eightBall = 'Risposta confusa.. riprova!';
    break;
  case 3:
    eightBall = 'Non posso prevederlo adesso.';
    break;
  case 4:
    eightBall = 'Non ci contare!';
    break;
  case 5:
    eightBall = 'Le mie fonti dicono di no.';
    break;
  case 6:
    eightBall = 'Le previsioni non sono favorevoli..';
    break;
  case 7:
    eightBall = 'I segni indicano di sì!';
    break;
}

alert(`La risposta è...   ${eightBall}`);
In che modo potrei risolvere?

7 Risposte

  • Re: Associare elemento input/submit ad un codice Javascript

    Ciao alext,
    Quando si inserisce il codice javascript in una pagina, questo viene eseguito istantaneamente. In effetti, in nessuna parte del tuo codice hai detto al browser che deve eseguire quel comando quando viene premuto il pulsante, giusto?

    Per eseguire del codice quando viene premuto un pulsante bisogna:
  • Re: Associare elemento input/submit ad un codice Javascript

    Ciao andreadev!

    Grazie mile per il supporto. Penso proprio che studiare il DOM in Javascript sarà uno dei prossimi step.

    Allora, è quasi un'ora e mezza che ci sbatto la testa e il massimo che sono riuscito a fare è questo:

    HTML
    <!DOCTYPE html>
    <html lang="it">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>La Sfera Magica</title>
        <script type="text/javascript" src="./eightball.js"></script>
        <link href="eightball.css" type="text/css" rel="stylesheet">
    </head>
    <body>
        <h1>PREVEDI IL TUO FUTURO </h1>
            <p>..poni una domanda..</p>
    
        <forms>
            <input type="text" name="question" id="question" required>
            <button id="button">Chiedi..</button>
        </form>
    </body>
    </html>
    JS
    let eightBall = '';
    
    let randomNumber = Math.floor(Math.random() * 8);
    
    document.getElementById("button").addEventListener("click", answerget(), true);
    
    function answerget () {
    
      switch (randomNumber){
      case 0:
        eightBall = "E' sicuro!";
        break;
      case 1:
        eightBall = "E' decisamente così!";
        break;
      case 2:
        eightBall = 'Risposta confusa.. riprova!';
        break;
      case 3:
        eightBall = 'Non posso prevederlo adesso.';
        break;
      case 4:
        eightBall = 'Non ci contare!';
        break;
      case 5:
        eightBall = 'Le mie fonti dicono di no.';
        break;
      case 6:
        eightBall = 'Le previsioni non sono favorevoli..';
        break;
      case 7:
        eightBall = 'I segni indicano di sì!';
        break;
    
      
    }
    alert(eightBall);
      }
    Quello che ho capito è che grazie a ".getElementbyId" richiamo un Id presente in HTML, e con ".addEventListener" tengo in ascolto l'elemento in questione e al "click" succede qualcosa, in questo caso dovrebbe partire la funzione answerget.
    Solo che mi manca sicuramente un pezzo perchè non funziona..
  • Re: Associare elemento input/submit ad un codice Javascript

    Usa gli strumenti sviluplatori del browser per vedere se ci sono errori javascript
    Tasto F12 in genere
  • Re: Associare elemento input/submit ad un codice Javascript

    Quello che ho capito è che grazie a ".getElementbyId" richiamo un Id presente in HTML, e con ".addEventListener" tengo in ascolto l'elemento in questione e al "click" succede qualcosa, in questo caso dovrebbe partire la funzione answerget.
    Sì, è praticamente così
    In effetti, con getElementById ottieni un riferimento all'intero oggetto html (compresi tutti gli attributi e proprietà).
    Il problema principale con il codice che hai inviato è nell'utilizzo di "addEventListener". In effetti hai eseguito la funzione subito, passando al metodo il valore di ritorno della funzione piuttosto che la funzione stessa.
    Quando vuoi passare una funzione ad un altra, devi inserire solo il nome della funzione, senza eseguirla

    Piccolo esempio:
    
    function esempio() {
        return 2;
    }
    
    let variabile = esempio(); // è uguale a ' variabile = 2 '
    
    altraFunzione(esempio()); // è uguale a ' altrafunzione(2) ' !!!
    
    altraFunzione(esempio); // ora sì che gli passiamo la nostra funzione!
    
    In questa circostanza Javascript non vede errori di sintassi, quindi purtroppo anche il consiglio (decisamente importante!) di aprire gli strumenti di sviluppatore del browser non ti avrebbe aiutato troppo.

    A questo punto il codice inizierà a funzionare, ma vedrai ancora un effetto strano collegato all'inizializzazione delle variabili... però sono sicuro che non avrai grosse difficoltà a correggerlo
  • Re: Associare elemento input/submit ad un codice Javascript

    andreadev ha scritto:


    ....
    In questa circostanza Javascript non vede errori di sintassi, quindi purtroppo anche il consiglio (decisamente importante!) di aprire gli strumenti di sviluppatore del browser non ti avrebbe aiutato troppo.

    A questo punto il codice inizierà a funzionare, ma vedrai ancora un effetto strano collegato all'inizializzazione delle variabili... però sono sicuro che non avrai grosse difficoltà a correggerlo
    Confermo quanto detto in un altro thread su Angular

    sspintux ha scritto:


    ....
    IMHO, per programmi di una certa complessità , con solo javascript ti ricoverano in psichiatria dopo una settimana
  • Re: Associare elemento input/submit ad un codice Javascript

    Premetto che nella risposta precedente ho omesso di dire che, utilizzando lo Strumento per Sviluppatori di Firefox, compariva l'erore "getElementById is null".

    In poche parole ho risolto "semplicemente così":

    JS
    
    let eightBall = '';
    
    let randomNumber = Math.floor(Math.random() * 8);
    window.onload = function(){
      document.getElementById("button").addEventListener("click", answerget);
    }
    function answerget () {
    
      switch (randomNumber){
      case 0:
        eightBall = "E' sicuro!";
        break;
      case 1:
        eightBall = "E' decisamente così!";
        break;
      case 2:
        eightBall = 'Risposta confusa.. riprova!';
        break;
      case 3:
        eightBall = 'Non posso prevederlo adesso.';
        break;
      case 4:
        eightBall = 'Non ci contare!';
        break;
      case 5:
        eightBall = 'Le mie fonti dicono di no.';
        break;
      case 6:
        eightBall = 'Le previsioni non sono favorevoli..';
        break;
      case 7:
        eightBall = 'I segni indicano di sì!';
        break;
    
      
    }
    alert(eightBall);
      }
     
    Il browser a quanto pare caricava prima il file js, e solo dopo continuava il parsing del file html, facendo comparire l'alert senza che io cliccassi il bottone.

    Ringrazio tutti per il supporto,

    al prossimo quesito!
  • Re: Associare elemento input/submit ad un codice Javascript

    Perfetto, sono contento adesso funzioni a dovere

    Inoltre sì, confermo quello che dice sspintux, a volte javascript può far venir voglia di sbattere la testa contro il muro
    Ti dà molte libertà, ma allo stesso tempo è un po... "elastico" sulla sintassi
Devi accedere o registrarti per scrivere nel forum
7 risposte