Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272

    Dubbio su incremento variabile in ciclo for

    Una delle mie prime emicranie con JS...
    Form con un solo campo di input, quindi campi.length = 1

    codice:
    var campi=document.getElementById('form').getElementsByTagName('input');
    for (i=0; i < campi.length; i++)  {
      alert (i);
      campi[i].onmouseover = function()  {alert(i) };
    }
    Il primo alert stampa 0 ed il secondo 1.
    Ci ho sbattuto un po' la testa e poi ho pensato che probabilmente, poiché il secondo alert è dentro una funzione, riceve la variabile i alla fine del ciclo quando ormai essa vale 1.
    Ho indovinato?
    Come potrei fare affinché invece riceva "correttamente" 0 come era nelle mie intenzioni?

    Grazie

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    prova così

    codice:
    var campi=document.getElementById('form').getElementsByTagName('input');
    for (i=0; i < campi.length; i++)  {
      val = i;
      campo = campi[val];
      campo.onmouseover = function()  { alert(val) };
    }
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272
    Grazie
    Funzionare funziona, ma se i campi fossero più d'uno dici che c'è un modo per ottenere che alert riceva il valore corrente di i e non quello della fine del ciclo?

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    ma ora non funziona l'alert?

    Se no prova a passare la variabile alla funzione

    codice:
    var campi=document.getElementById('form').getElementsByTagName('input');
    for (i=0; i < campi.length; i++)  {
      val = i;
      campo = campi[val];
      campo.onmouseover = function(val)  { alert(val) };
    }
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272
    Sì funziona se il campo di input resta uno ma ovviamente no se i campi di input sono due o più.
    Se si prova a passare val come parametro il risultato di alert è undefined.
    Ora la mia domanda è: se i campi di input sono più d'uno si può in qualche modo, utilizzando quel ciclo, fare in modo che ogni alert associato al rispettivo campo di input riceva il valore corrente della variabile i all'interno del ciclo?

  6. #6
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    copia e incolla

    codice:
    <script type="text/javascript">
    // <![CDATA[
    
    
    function attachEvent()  {
    
        var campi = document.getElementById('mio_form').getElementsByTagName('input');
        for (i=0; i<campi.length; i++)  {
           campo = campi[i];
           setValue(campo, i);
        }
    }
    
    function setValue(f, val) {
        f.onmouseover = function() {
            alert(val);
        }
    }
    
    
    window.onload = attachEvent;
    // ]]>
    </script>
    
    <form id="mio_form">
        <input type="button" />
    
        <input type="button" />
    
        <input type="button" />
    
    </form>

    passando sui vari button hai un numero diverso
    P.s.: non usare 'form' come id... è una parola riservata


    Ciao
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272
    Grazie mille

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.