Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    166

    Perchè non funziona la chiamata ad una funzione se la sposto dentro documento.ready(function...)?

    Ciao a tutti,
    chi sa dirmi perchè questo script (che funziona) non funziona più se sposto la funzione test() dentro al document.ready(function()...)

    Codice PHP:

    <!doctype html>
    <
    html>  
    <
    head>        

    <
    script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>        

    <script>            
              $(document).ready(function(){                    
                   $("#box").html("una qualunque stringa");                        
                   $("#box").css("fontSize", '5em');                        
                   test();
                }); 

                   // se la funzione test la sposto dentro al document.reay lo script non va!!!!!!!!!        

                    function test() {            
                        var colori = ["yellow", "green", "red", "black"];                       
                        var i = Math.floor(Math.random() * 4);            
                        colore = colori[i];                        
                        $("#box").css("color", colore);            
                        setTimeout("test()", 1000);                    
                   }                    
            </script>      
    </head>  

    <body>        
         <center>        
               <div id ="box"><div>    
        </center>      

    </body></html> 

    Grazie a chi saprà rispondermi
    Ultima modifica di artex; 05-11-2015 a 14:19

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, il problema sta qui:
    codice:
    setTimeout("test()", 1000);
    Quando la funzione è passata come stringa testuale al setTimeout, questa sarà valutata in riferimento al contesto globale e non a quello locale.

    Non hai motivo di passare quella funzione come stringa, per cui il problema si risolve semplicemente usando questa sintassi, senza apici:
    codice:
    setTimeout(test, 1000);
    Cioè, passando la funzione come semplice riferimento. In questo caso la funzione stessa sarà valutata, in primo luogo, sul contesto locale. Potrai mettere quindi la tua funzione dentro il ready senza problemi.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    166
    Perfetto,

    Grazie

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.