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

    Temporizzare una funzione cn passaggio di variabile.

    Ciao a tutti vorri temporizzare una funzione ma non ci riesco...

    Nello specifico è una funzione che fa comparire un DIV nascosto e al suo interno scrive un testo (suggerimento) che viene passato dinamicamente.


    codice:
    function aiuto(suggerimento) {
    	var visualizza = function(suggerimento){
    		var div_help = document.getElementById("suggerimenti");
    		div_help.style.display = 'block';
    		div_help.firstChild.nodeValue = suggerimento;
    		}
    		timer = window.setTimeout('visualizza(suggerimento)', 1500);
    }
    Ovviamente nell'html il richiamo sarà con:
    codice:
    onclick = "aiuto('Un testo da passare')"
    Il problema sembra stare nella variabile "suggerimento" che nell'istruzione setTimeout non viene passata e da errore.

    Consigli??

  2. #2
    Se provi a togliere gli apici a visualizza(suggerimento) scrivendo così

    timer = window.setTimeout(visualizza(suggerimento), 1500);


    ??

  3. #3
    Passa la variabile e lancia la funzione ma non la temporizza...

    Invece se la scrivo così, temporizza e funziona ma ovviamente non passa la variabile...
    timer = window.setTimeout(visualizza, 5500);

    Idee??? Consigli???

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Non puoi richiamare con il timer una funzione che non sia globale, ovvero che non esista solo all'interno di un'altra funzione... prova ne sia che se tenti di richiamare visualizza() la funzione non viene trovata.
    Sposta la funzione all'esterno di aiuto() e tutto magicamente funziona

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    Originariamente inviato da br1
    Non puoi richiamare con il timer una funzione che non sia globale, ovvero che non esista solo all'interno di un'altra funzione... prova ne sia che se tenti di richiamare visualizza() la funzione non viene trovata.
    Sposta la funzione all'esterno di aiuto() e tutto magicamente funziona

    ciao
    Se la porto fuori temporizza correttamente ma poi mi dice che "suggerimento" non è definita e non esegue la funzione "aiuto"...

  6. #6
    setTimeout cerca la variabile dopo l'intervallo di tempo prefissato: ma non la cerca dentro aiuto, la cerca nello scope della window.

    <script>
    function aiuto(suggerimento) {
    var div_help = document.getElementById("suggerimenti");
    div_help.style.display = 'block';
    if(!div_help.childNodes.length){div_help.appendChi ld(document.createTextNode(''));}
    div_help.firstChild.nodeValue = suggerimento;
    setTimeout('aiuto(suggerimento)', 1500);
    }

    aiuto('ciao ciao')
    </script>

  7. #7
    Scusa un po', ma niente niente tu stavi tentando una Javascript enclosure ( http://www.jibbering.com/faq/faq_notes/closures.html )?
    Wow.

    Comunque allora il codice è questo:

    <script>
    function aiuto(suggerimento) {
    return function(){
    var div_help = document.getElementById("suggerimenti");
    div_help.style.display = 'block';
    if(!div_help.childNodes.length){div_help.appendChi ld(document.createTextNode(''));}
    div_help.firstChild.nodeValue = suggerimento;
    }
    }

    var foo='ciao ciao 3';//o quello che vuoi

    setTimeout("aiuto('"+foo+"')()", 1500);
    </script>

    Nota che aiuto essendo tra apici doppi passa la variabile tra apici singoli. Nota anche che la sintassi
    aiuto(blabla)()
    NON è un errore, con specifico riferimento alle parentesi tonde.
    Provala.

  8. #8
    Originariamente inviato da TrueLies
    Scusa un po', ma niente niente tu stavi tentando una Javascript enclosure ( http://www.jibbering.com/faq/faq_notes/closures.html )?
    Wow.

    Comunque allora il codice è questo:

    <script>
    function aiuto(suggerimento) {
    return function(){
    var div_help = document.getElementById("suggerimenti");
    div_help.style.display = 'block';
    if(!div_help.childNodes.length){div_help.appendChi ld(document.createTextNode(''));}
    div_help.firstChild.nodeValue = suggerimento;
    }
    }

    var foo='ciao ciao 3';//o quello che vuoi

    setTimeout("aiuto('"+foo+"')()", 1500);
    </script>

    Nota che aiuto essendo tra apici doppi passa la variabile tra apici singoli. Nota anche che la sintassi
    aiuto(blabla)()
    NON è un errore, con specifico riferimento alle parentesi tonde.
    Provala.
    Non so come ringraziarti. Hai risopolto il mio problema egregiamente!! Adesso cercherò anche di capire "COME" lo hai risolto anche perchè non mi va di prendere una cosa per buona solo perchè funziona. Altrimenti non imparerò ai nulla.

    Grazie ancora.

    Sergio

  9. #9
    Situazione in cui è inutile usare un eval...
    Quì si può benissimo usare una funzione anonima:
    codice:
    window.setTimeout(function() { visualizza(suggerimento); }, 1500);
    La closures che ti consiglia TrueLies andrebbe bene ad esempio per simulare un apply.

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.