Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    446

    problema con variabili globali

    Ciao, ho un piccolo problema che nnon riesco a risolvere. Definisco all'interno del mio javascript alcune variabili tra cui un array. Ora non appena provo ad utilizzare il mio array all'interno di una funzione (tipo alert(categoria['animali') mi dice undefinited....

    L'array che definisco fuori dalle funzioni ma all'interno del javascript è fatto così:
    categoria['animali'] = 0;
    categoria['persone'] = 0;
    categoria['piante'] = 0;

    Cosa sbaglio??

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    e come/dove lo usi quell'array?
    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
    May 2006
    Messaggi
    446
    l'errore era che all'interno del javascript definivo un array con lo stesso nome e quindi mi prendeva quello che era vuoto :rollo:

    Ora ho un altro problema: definisco all'inizio del javascript (come variabile globale) un array inizialmente con tutti i valori a zero.
    Quando clicco su un pulsante devo cambiare il valore di un elemento dell'array a 1.
    Ma quando chiedo in un altra funzione (non quella associata al click del pulsante) di stamparmi l'array, mi da tutti gli elementi a 0. Come posso fare a memorizzare il cambiamento?

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Originariamente inviato da 83kiara83
    l'errore era che all'interno del javascript definivo un array con lo stesso nome e quindi mi prendeva quello che era vuoto :rollo:

    Ora ho un altro problema: definisco all'inizio del javascript (come variabile globale) un array inizialmente con tutti i valori a zero.
    Quando clicco su un pulsante devo cambiare il valore di un elemento dell'array a 1.
    Ma quando chiedo in un altra funzione (non quella associata al click del pulsante) di stamparmi l'array, mi da tutti gli elementi a 0. Come posso fare a memorizzare il cambiamento?

    Probabilmente non hai definito quell'array come globale.
    Oppure dentro la funzione di stampa non usi quell'array.

    Ma finché che non posti del codice si può solo tirare ad indovinare.
    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
    May 2006
    Messaggi
    446
    codice:
    <script type="text/javascript">
    var prova=new Array();
    
    prova['a'] = 0;
    prova['b'] = 0;
    prova['c'] = 0;
    prova['d'] = 0;
    prova['e'] = 0;
    
    
    function salva()
    {
    alert(prova['a']);
    }
    function cambia()
    {
    prova['a'] = 1;
    }
    ...

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Originariamente inviato da 83kiara83
    codice:
    <script type="text/javascript">
    var prova=new Array();
    
    prova['a'] = 0;
    prova['b'] = 0;
    prova['c'] = 0;
    prova['d'] = 0;
    prova['e'] = 0;
    
    
    function salva()
    {
    alert(prova['a']);
    }
    function cambia()
    {
    prova['a'] = 1;
    }
    ...
    A mio avviso il problema deriva dal fatto che nella funzione "cambia", di fatto stai cercando di definire una nuova array locale impostandola ad 1. Infatti per definire una variabile non è strettamente necessario usare la chiave "var".
    Così facendo, nella funzione "salva()" visualizzi l'array globale che è però ancora impostata a zero.

    Suppongo che tu abbia necessità di avere una soluzione al problema.
    La soluzione stà nel passare alla funzione "cambia()", l'array globale come parametro.
    Quando un array viene infatti passato come parametro, la modalità di trasmissione è sempre per "riferimento"; in tal caso,quindi,i valori dell'array, se modificat dal sottoprogramma chiamato, avranno effetto sul chiamante.

    Per cui:

    cambia(prova);
    salva();

    function cambia(A)
    {
    A['a'] = 1;
    }


    Un'altra piccola osservazione:
    Sei sicura che nel valorizzare gli elementi dell'array non ti confondi con la sintassi del PHP?
    Voglio dire che per quel che ne sò, in javascript, per far riferimento ad un elemento dell'array si utilizza sempre e solo un indice numerico.
    Nel PHP ci sono anche gli indici associativi per cui l'indice non è necessariamente numerico.

  7. #7
    guarda proprio ieri ho fatto 1 cosa del genere e mi funzionava anche senza passar l'array ...
    + che altro al posto di usar nell'array gli oggetti di riferimento stringa dovresti usar i numeri...
    potrebbe esser quello il problema...
    prova con prova[0,1,2,3,...] al posto di prova['a','b',...]

    calaf anch'io avevo lo stesso dubbio .. tra l'altro se guarda l'oggetto stringa ogni volta che fai 'a' viene creato un oggetto diverso e quindi un nuovo elemento dell'array... ma cmq in ogni caso che senso ha gestire un array con stringe? sono molto + difficili da manipolare... metti caso che vuoi scorrerti l'array come fai? tanto vale far tipo prova[primo,secondo] e all'inizio inizializzarti primo = 0; secondo = 0

    in questo modo guardando l'array hai una variabile leggibile che capisci al volo di che si tratta e continuii ad usar riferimenti numerici
    W magica ROMA!

  8. #8
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Originariamente inviato da Calaf1966
    A mio avviso il problema deriva dal fatto che nella funzione "cambia", di fatto stai cercando di definire una nuova array locale impostandola ad 1. Infatti per definire una variabile non è strettamente necessario usare la chiave "var".
    Così facendo, nella funzione "salva()" visualizzi l'array globale che è però ancora impostata a zero.
    questo non è corretto.
    Se uso una variabile dentro una funzione, ma definita a livello di scope globale, non sto creando una nuova variabile, sto usando quella globale.

    Infatti questo codice non ha nessun problema

    codice:
      <script type="text/javascript">
            // <![CDATA[
            
            var prova=new Array();
    
            prova['a'] = 0;
            prova['b'] = 0;
            prova['c'] = 0;
            prova['d'] = 0;
            prova['e'] = 0;
    
    
            function salva() {
                alert(prova['a']);
            }
            
            function cambia() {
                prova['a'] = 1;
            }
            
            salva(); // restituisce 0
            cambia();
            salva(); // restituisce 1
            
            // ]]>
            </script>
    non capisco quale sia l'anomalia di questo codice... :master:
    Vuoi aiutare la riforestazione responsabile?

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

  9. #9
    Originariamente inviato da fcaldera
    questo non è corretto.
    Se uso una variabile dentro una funzione, ma definita a livello di scope globale, non sto creando una nuova variabile, sto usando quella globale.

    Infatti questo codice non ha nessun problema

    codice:
      <script type="text/javascript">
            // <![CDATA[
            
            var prova=new Array();
    
            prova['a'] = 0;
            prova['b'] = 0;
            prova['c'] = 0;
            prova['d'] = 0;
            prova['e'] = 0;
    
    
            function salva() {
                alert(prova['a']);
            }
            
            function cambia() {
                prova['a'] = 1;
            }
            
            salva(); // restituisce 0
            cambia();
            salva(); // restituisce 1
            
            // ]]>
            </script>
    non capisco quale sia l'anomalia di questo codice... :master:
    anche secondo me il codice nn dovrebbe aver problemi... l'unica cosa su cui nn sono convinto e' che magari usando stringhe (che sono oggetti) come chiavi dell'array quando va a lanciar il cambia potrebbe creare un NUOVO oggetto stringa (contenente la stessa cosa) e quindi magari ci sono 2 indici che si chiamano 'a' nell'array uno impostato a 0 e l'altro a 1... io cmq consiglio di usar sempre i numeri che almeno sei sicuro
    W magica ROMA!

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.