Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    3

    richiesta spiegazione funzione semplice semplice

    Ciao a tutti, mi chiamo Giovanni e sto cercando di imparare un po il javascript, oltre all'HTML5 e CSS3 di cui ho gi� una mezza infarinatura.. Sto seguendo un libro dal titolo: Imparare il javascript dom html e css coi browser game.
    Solo che sono arrivato a un punto in cui non capisco come una funzione svolge un determinato compito
    qui la funzione:
    codice:
    function checkBet(kanga) {         
    var betFields=document.getElementById('betform').getElementsByTagName('input');
             for(var i=0;i<4;i++) {
                if (i!=(kanga-1)) {
                   betFields[i].value="";
                } else {
                   if (isNaN(betFields[i].value) || (betFields[i].value<0) || (betFields[i].value>1000))  {
                      betFields[i].value="";
                      betOK=0;
                   } else {
                      betFields[i].value=parseInt(betFields[i].value);
                      betValue=betFields[i].value;
                      betKanga=i+1;
                      betOK=1;
                   }
                }
             }
          }
    qui dove viene richiamata:
    codice:
    <form id="betform">      
    <p id="quote1"></p><input type="text" onchange="checkBet(1);" name="kanga1bet"/><br/>
          <p id="quote2"></p><input type="text" onchange="checkBet(2);" name="kanga2bet"/><br/>
          <p id="quote3"></p><input type="text" onchange="checkBet(3);" name="kanga3bet"/><br/>
          <p id="quote4"></p><input type="text" onchange="checkBet(4);" name="kanga4bet"/><br/>
          <input type="button" onClick="startRace();" name="kanga4bet" value="Start Race!"><br/>
       </form>
    non capisco il primo IF, praticamente da quanto leggo dal codice cambiando da un campo input all'altro dovrebbe pulirmi il precedente, non solo quando scrivo un altro valoe in un altro campo ma in ogni caso.. Nel libro questo passaggio � dato per scontato ma io volevo capire..
    Sicuramente � una cosa banale per chi mastica anche un minimo di javascript ma proprio non capisco

    qui il link alla pagina http://agkappmarket.altervista.org/j...kangarace.html

    Grazie per l'aiuto
    Ultima modifica di ggio91; 18-05-2016 a 10:39

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao e benvenuto.

    praticamente da quanto leggo dal codice cambiando da un campo input all'altro dovrebbe pulirmi il precedente
    L'effetto visivo è quello, ma in realtà ripulisce tutti i campi tranne quello appena modificato. Chiaramente vedrai ripulire solo il precedente perché gli altri sono già vuoti.

    Cerco di chiarirti quanto hai chiesto, ma non ti nascondo che queste sono delle nozioni di basi della programmazione, per cui credo che tu abbia sbagliato guida per iniziare. Magari dovresti iniziare da qualcosa di più basilare... o magari hai semplicemente saltato qualche capitolo in modo poco furbo

    Comunque sia, il primo if è una semplice condizione che sostanzialmente considera tutti gli elementi che sono diversi da quello preso in esame (cioè quello che si riferisce alla variabile kanga passata alla funzione). Chiaramente va tenuto presente che siamo dentro un ciclo, il quale è impostato per creare un'iterazione sui 4 campi input nell'esempio.

    Traducendo la condizione in italiano, possiamo dire che tutte le volte che la variabile i (incrementata durante il ciclo for) risulta non uguale ("!=") alla variabile kanga, argomento della funzione (decrementata di 1)*, cioè dall'indice riferito al nome del campo che ha richiamato la funzione, allora il valore del campo (considerato in riferito all'iterazione corrente del ciclo) viene vuotato.
    Se tale condizione non è soddisfatta, significa che si tratta del campo sul quale si sta agendo, per cui avverrà l'azione definita dentro il blocco else.

    * la variabile kanga avendo 1 come primo valore, in riferimento agli elementi considerati, viene decrementata di 1 per poterla correttamente comparare col valore di i che invece parte da 0.

    Questo è dovuto a due fattori:
    - fattore computazionale - generalmente in programmazione un vettore (array, collection o altri tipi di liste di elementi), come è quello restituito da getElementsByTagName(), è definito in base 0, cioè il primo elemento ha indice 0 e non 1. Non è sempre così ma convenzionalmente questa è la norma.
    - fattore umano - d'altra parte, per una questione di leggibilità del codice, i programmatori usano spesso definire il primo elemento, di una determinata lista, in maniera più "umana" partendo da 1 anziché 0.

    Per cui da script sarà necessario "correggere" opportunamente questa differenza, come è stato fatto, per poter comparare correttamente i valori considerati.

    Non ti nego che ci sono svariati modi (anche più stringati, ottimizzati, nonché più scalabili) per ottenere lo stesso risultato ma con un codice magari più pulito (senza voler togliere nulla a quella guida).





    PS: consiglio di utilizzare titoli maggiormente autodescrittivi quando apri nuove discussioni.
    PPS: giusto per informazione, purtroppo c'è attualmente qualche problema con la piattaforma del forum, per cui non fare caso ad eventuali errori di codifica delle lettere accentate quando posti sul forum.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    3
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ciao e benvenuto.


    L'effetto visivo è quello, ma in realtà ripulisce tutti i campi tranne quello appena modificato. Chiaramente vedrai ripulire solo il precedente perché gli altri sono già vuoti.

    Cerco di chiarirti quanto hai chiesto, ma non ti nascondo che queste sono delle nozioni di basi della programmazione, per cui credo che tu abbia sbagliato guida per iniziare. Magari dovresti iniziare da qualcosa di più basilare... o magari hai semplicemente saltato qualche capitolo in modo poco furbo

    Comunque sia, il primo if è una semplice condizione che sostanzialmente considera tutti gli elementi che sono diversi da quello preso in esame (cioè quello che si riferisce alla variabile kanga passata alla funzione). Chiaramente va tenuto presente che siamo dentro un ciclo, il quale è impostato per creare un'iterazione sui 4 campi input nell'esempio.

    Traducendo la condizione in italiano, possiamo dire che tutte le volte che la variabile i (incrementata durante il ciclo for) risulta non uguale ("!=") alla variabile kanga, argomento della funzione (decrementata di 1)*, cioè dall'indice riferito al nome del campo che ha richiamato la funzione, allora il valore del campo (considerato in riferito all'iterazione corrente del ciclo) viene vuotato.
    Se tale condizione non è soddisfatta, significa che si tratta del campo sul quale si sta agendo, per cui avverrà l'azione definita dentro il blocco else.

    * la variabile kanga avendo 1 come primo valore, in riferimento agli elementi considerati, viene decrementata di 1 per poterla correttamente comparare col valore di i che invece parte da 0.

    Questo è dovuto a due fattori:
    - fattore computazionale - generalmente in programmazione un vettore (array, collection o altri tipi di liste di elementi), come è quello restituito da getElementsByTagName(), è definito in base 0, cioè il primo elemento ha indice 0 e non 1. Non è sempre così ma convenzionalmente questa è la norma.
    - fattore umano - d'altra parte, per una questione di leggibilità del codice, i programmatori usano spesso definire il primo elemento, di una determinata lista, in maniera più "umana" partendo da 1 anziché 0.

    Per cui da script sarà necessario "correggere" opportunamente questa differenza, come è stato fatto, per poter comparare correttamente i valori considerati.

    Non ti nego che ci sono svariati modi (anche più stringati, ottimizzati, nonché più scalabili) per ottenere lo stesso risultato ma con un codice magari più pulito (senza voler togliere nulla a quella guida).





    PS: consiglio di utilizzare titoli maggiormente autodescrittivi quando apri nuove discussioni.
    PPS: giusto per informazione, purtroppo c'è attualmente qualche problema con la piattaforma del forum, per cui non fare caso ad eventuali errori di codifica delle lettere accentate quando posti sul forum.

    Innanzitutto grazie per la risposta, comunque si ho capito che lui va a "pulire" tutti i campi tranne quello che ho modificato, non capisco perchè lo fa solo quando modifico un valore e non quando cambio da un campo e l'altro, dato che la funzione è richiamata ogni volta che clicco su un campo diverso.. io credevo che nella variabile "kanga" ci entrassero i numeri da 1 a 4 e poi con l'IF mi va a fare la comparazione con l'indice "i", e questi cambiano anche se non modifico più nessun valore, invece sembra che faccia la comparazione col valore contenuto in kanga(n) e col valore contenuto in "i".
    Non so se sono riuscito a esprimere correttamente il mio dubbio, mi mancano i vocaboli corretti probabilmente .

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    dato che la funzione è richiamata ogni volta che clicco su un campo diverso
    Non proprio, quello che intendi tu è onclick. Sui tag input è invece definito l'evento onchange che avviene appunto quando, uscendo da un campo input (o altri elementi simili), il suo valore risulta cambiato.

    io credevo che nella variabile "kanga" ci entrassero i numeri da 1 a 4 e poi con l'IF mi va a fare la comparazione con l'indice "i"
    Esattamente. Sia kanga che i rappresentano solo degli indici.

    e questi cambiano anche se non modifico più nessun valore, invece sembra che faccia la comparazione col valore contenuto in kanga(n) e col valore contenuto in "i".
    La variabile kanga (argomento della funzione) viene semplicemente valorizzata col numero di riferimento di uno specifico elemento quando la funzione è richiamata attraverso il suo evento onchange, che avviene solo se il valore è cambiato, come spiegato sopra.

    Spero sia più chiaro


    PS: ti prego, non rispondere quotando l'intero post, se non ce n'è bisogno. In questo caso sporca solo la discussione.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    3
    Ecco perche non capivo.. Sul libro l'evento onchange è spiegato cosi: L’evento onChange si verifica quando il campo di input “perde
    il focus”, detto in italiano quando l’utente preme invio o clicca su un’altra casella o in generale su un
    altro elemento presente nella finestra del browser.
    E quindi non riuscivo a capire..
    Grazie mille per l'aiuto..

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    L’evento onChange si verifica quando il campo di input “perde il focus”
    Sì esattamente, ma non solo. Più precisamente avviene quando l'elemento input, perdendo il focus, risulta avere il suo valore modificato.

    Come è spiegato sulla guida che ti ho linkato nel precedente post, per tale evento, questo è simile all'evento oninput ma quest'ultimo avviene istantaneamente alla modifica del valore, per cui anche senza perdere il focus.

    Forse la guida che stai seguendo ha messo l'enfasi su questo punto, per precisare meglio che onchange non avviene solo in base alla sola modifica del valore ma, appunto, quando il campo input perde il focus.

    Fai però attenzione perché lo stesso evento è presente anche per elementi input di tipo checkbox o radio, ma in tal caso avviene appena il valore è stato modificato, anche senza che sia perso il focus (vedi la guida linkata).

    Grazie mille per l'aiuto..
    Figurati.
    Buon proseguimento
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.