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

    Funzione con argomento per setTimeout

    Ciao,
    con questa funzione molto semplice cambio il contenuto di un layer (il cui id è targetLayer).

    Dopo 2 secondi lo riporto al suo valore iniziale, salvato preventivamente nella variabile previousContent.

    Codice PHP:
    function fill(newContent) {
    var 
    document;

    // Creo una copia del contenuto originale del layer nella variabile [b]previousContent[/b]:
    var previousContent d.getElementById('targetLayer').innerHTML;

    // Sostituisco il contenuto del targetLayer:
    d.getElementById('targetLayer').innerHTML newContent;

    // Dopo 2 secondi riporto il contenuto del targetLayer al suo valore originale:
    window.setTimeout("LayerRefill("+previousContent+")"2000);
    }


    function 
    LayerRefill(a) {
    document.getElementById('targetLayer').innerHTML a;

    ma il contenuto del layer non varia dopo i 2 secondi in quanto la funzione LayerRefill() non riceve alcun valore.

    Pertanto credo di sbagliare la temporizzazione della funzione con argomento tramite setTimeout, sebbene non sappia dove possa aver sbagliato e qualcuno qui (ma anche altrove) conferma che il modo corretto è quello, ovvero i backslash o giocare con gli apici singoli/doppi.

    Qual è il modo corretto di passare la variabile previousContent alla funzione LayerRefill() ?
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    prova
    window.setTimeout(function() {LayerRefill(previousContent);}, 2000);

  3. #3
    Non funziona con nessun browser :|
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  4. #4
    up
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  5. #5
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    hai fatto quasi tutto giusto emanueledg... ti sei scordato gli apici
    codice:
    <script language="javascript">
    function fill(newContent) {
    var d = document;
    
    // Creo una copia del contenuto originale del layer nella variabile previousContent:
    var previousContent = d.getElementById('targetLayer').innerHTML;
    
    // Sostituisco il contenuto del targetLayer:
    d.getElementById('targetLayer').innerHTML = newContent;
    
    // Dopo 2 secondi riporto il contenuto del targetLayer al suo valore originale:
    window.setTimeout("LayerRefill('"+previousContent.replace(/'/g,"\\'")+"')", 2000);
    }
    
    
    function LayerRefill(a) {
    document.getElementById('targetLayer').innerHTML = a;
    }
    
    </script>
    prova
    <hr>
    <div id="targetLayer">Contenuto del 'div' targetLayer.</div>

  6. #6
    Grazie willybit della tua luce sulla questione

    Visto il complesso contenuto HTML della variabile la funzione non andava, allora ho pensato ad un ulteriore passaggio al replace() per la sostituzione anche di apici doppi:

    previousContent = previousContent.replace(/'/g,"\'");
    previousContent = previousContent.replace(/"/g,'\"');


    ma poi ho pensato: perché non avvalersi della funzione di Javascript dedicata proprio alla codifica di testo formattato per poterlo comodamente gestire nelle variabili?
    Quindi ho passato all'escape() fin dall'inizio il contenuto HTML della variabile, poi la funzione finale che lo reinserisce nel layer provvede a decodificarlo con unescape():

    codice:
    <html>
    <head>
    <script language="javascript" type="text/javascript">
    <!--
    function fill(newContent) {
    var d = document;
    
    // Creo una copia del contenuto originale del layer nella variabile previousContent:
    var previousContent = escape(d.getElementById('targetLayer').innerHTML);
    
    // Sostituisco il contenuto del targetLayer:
    d.getElementById('targetLayer').innerHTML = newContent;
    
    // Dopo 2 secondi riporto il contenuto del targetLayer al suo valore originale:
    window.setTimeout("LayerRefill('"+previousContent+"')", 2000);
    }
    
    
    function LayerRefill(a) {
    document.getElementById('targetLayer').innerHTML = unescape(a);
    }
    //-->
    
    </script>
    </head>
    <body>
    prova
    <hr>
    <div id="targetLayer">Contenuto del 'div' targetLayer.</div>
    </body>
    </html>
    e così funziona bene con qualsiasi tipo di input... Che ne pensi?
    Grazie mille ancora!
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  7. #7
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    ottima soluzione

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.