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

    modifica variabile globale

    Salve,
    sto impazzendo su quella che dovrebbe essere una stupidaggine che in liguaggi come il C riesco a fare in 2 secondi.

    Se in uno script definisco una variabile globale, come la modifico da dentro una funzione?
    Ho girato mezzo forum per non parlare di tutorial e ricerche su google. Sembra semplicissimo e invece non ci riesco.

    Il codice qui sotto è giusto?

    codice:
    <script type="text/javascript">
    messaggio2 = "ciao";
    
    function dichiara() {
    var messaggio = "prrrrr";
    messaggio2 = messaggio;
    }
    
    function scrivi() {
    document.write(messaggio2);
    }
    </script>
    Poi nel codice html, giusto per fare una prova, ho scritto <body onLoad="scrivi()">

    Il risultato è sempre "ciao", mentre io voglio "prrrrr".
    Sono riuscito ad ottenerlo solo così:
    codice:
    <script type="text/javascript">
    messaggio2 = dichiara();
    
    function dichiara() {
    var messaggio = "prrrrr";
    return messaggio;
    }
    
    function scrivi() {
    document.write(messaggio2);
    }
    </script>
    Ma non è la soluzione ideale perché vorrei modificare 3 variabili globali dall'interno di una funzione.

    Mi sapete dire dove sbaglio?
    Nemesis

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Forse non ho capito bene, ma se tu invochi scrivi() senza aver prima invocato dichiara(), come pretendi di ottenere quello che vuoi? :master:

    io penso che vada così, ma forse mi sbaglio
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Pagina senza titolo</title>
    
        <script language="javascript" type="text/javascript">
    // <!CDATA[
    messaggio2 = "ciao";
    
    function dichiara() 
    {
        var messaggio = "prrrrr";
        messaggio2 = messaggio;
    }
    
    function scrivi() 
    {
        alert(messaggio2);
    }
    
    // ]]>
        </script>
    
    </head>
    <body>
        <input id="Button1" type="button" value="button" onclick="dichiara();scrivi();" />
    </body>
    </html>
    Pietro

  3. #3
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Si è come dice pietro09 volendo puoi anche fare cosi:
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
    <script type="text/javascript">
    var prova = "Questo è il mio primo messaggio"
    window.onload = function(){prova="Qui metto il nuovo messaggio"; document.getElementById("testo").innerHTML=prova;}
    </script>
    </head>
    <body>
    <span id="testo"></span>
    </body>
    </html>
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  4. #4
    Salve e scusate per il ritardo con cui rispondo.
    Effettivamente questi sono gli effetti che si ottengono lavorando fino alle 4 di notte...
    Se non chiamo dichiara() non mi cambierà mai la variabile.

    Mi è bastato cambiare scrivi() da:

    codice:
    function scrivi() {
    document.write(messaggio2);
    }
    a

    codice:
    function scrivi() {
    dichiara();
    document.write(messaggio2);
    }
    per avere un esempio funzionante.

    Conoscendo poco javascript ero convinto di sbagliare qualcosa scrivendo il codice e sono stato ore su una decina di righe senza accorgermi di un errore così banale.

    Grazie mille e scusate per il quesito a dir poco da principiante.
    Nemesis

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.