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

    Funzione da richiamare due volte nella pagina

    Salve a tutti,
    ho una semplice funzione che mi crea un conto alla rovescia in un punto della pagina.
    codice:
    function countdown() {
    
    	if(mancanti>0) {
    		mancanti--;
    		secondi = mancanti;
    		giorni = parseInt(secondi/86400);
    		secondi = secondi - (giorni * 86400);
    		ore = parseInt(secondi/3600);
    		secondi = secondi - (ore * 3600);
    		minuti = parseInt(secondi/60);
    		secondi = secondi - (minuti * 60);
    		messaggio = (giorni>0) ? giorni+"d " : "";
    		messaggio = (giorni>0 || ore>0) ? messaggio+ore+"h " : "";
    		messaggio = (giorni>0 || ore>0 || minuti>0) ? messaggio+minuti+"m " : "";
    		messaggio = messaggio+secondi+"s";
    		document.getElementById(iditem).innerHTML = messaggio;
    		setTimeout("countdown()",1000);
    	}
    	else
    	{
    		messaggio = "{EXPIRED}";
    		document.getElementById(iditem).innerHTML = messaggio;
    	}
    }
    La funzione la richiamo in questo modo:
    codice:
    <script type="text/javascript">
    	var mancanti = 60000;
    	var iditem = 'timeleft-1';
    	window.onload=countdown();
    </script>
    
    <script type="text/javascript">
    	var mancanti = 60000;
    	var iditem = 'timeleft-2';
    	window.onload=countdown();
    </script>
    L'errore che ottengo, e che la seconda chiamata della funzione, sovrascrive la prima, per cui ho il conto alla rovescia che toglie due secondi alla volta dal secondo campo.
    Potrei chiamare due funzioni con nomi diversi, ma non so a priori quante volte la devo chiamare.
    E' una cosa gestita da php.

    Come posso risolvere?
    Ciao!

  2. #2
    Nessuno?
    Ciao!

  3. #3
    il motivo per cui non tottieni risposta è probabilmente questo: chiamare due volte la stessa funzione che esegue un setinterval è chiaramente disfunzionale ed è del tutto ovvio che produca sovrapposizioni. peraltro la soluzione la conosci: due funzioni diverse. Non è chiaro altresì perchè per te questa soluzione ti appare non implementabile.
    Quando non si riceve risposta merita spiegarsi meglio (a meno che non si tratti di richieste per ottenere intere applicazioni che passano spesso inevase per ovvi motivi o a meno che chi fa domande non sembri del tutto a digiuni di javascript, ma almeno il primo non mi pare il tuo caso)

  4. #4
    Disfunzionale nel senso che non può funzionare lo so.
    Volevo farlo senza dover creare più funzioni, con diverso nome, inline all'interno della pagina.

    Speravo che i più esperti di me in javascript mi potessero aiutare con qualche trick.
    Ciao!

  5. #5
    Hai provato a cercare altre vie:

    Testato e funzionante

    Codice PHP:
    <div id="c1">

    </
    div>
    <
    div id="c2">

    </
    div>
    <
    script type="text/javascript">
        var 
    countdowns= Array();
        function 
    countdown() {
            var 
    messaggio;
            for(var 
    i=0i<countdowns.lengthi++) {
                
    messaggio="";
                if(
    countdowns[i]['mancanti']>0) {
                    
    countdowns[i]['mancanti']--;
                    
    secondi countdowns[i]['mancanti'];
                    
    giorni parseInt(secondi/86400);
                    
    secondi secondi - (giorni 86400);
                    
    ore parseInt(secondi/3600);
                    
    secondi secondi - (ore 3600);
                    
    minuti parseInt(secondi/60);
                    
    secondi secondi - (minuti 60);
                    
    messaggio = (giorni>0) ? giorni+"d " "";
                    
    messaggio = (giorni>|| ore>0) ? messaggio+ore+"h " "";
                    
    messaggio = (giorni>|| ore>|| minuti>0) ? messaggio+minuti+"m " "";
                    
    messaggio messaggio+secondi+"s";
                    
    document.getElementById(countdowns[i]['id']).innerHTML messaggio;
                }
                else
                {
                    
    messaggio "{EXPIRED}";
                    
    document.getElementById(countdowns[i]['id']).innerHTML messaggio;
                }
            }
        }
        function 
    startGlobalTimer() {
            
    setInterval(countdown,1000);
        }
        
    countdowns.push({mancanti:30000id:'c1'});
        
    countdowns.push({mancanti:60000id:'c2'});
        
    window.onloadstartGlobalTimer;
    </script> 

    Migliorerei anche la funzione in se... penso ci sia un modo più elegante per farlo (forse con la funzione date http://www.w3schools.com/js/js_obj_date.asp) ma se funziona il tuo e non lo devi far vedere a nessuno... =)

  6. #6
    -edit- Quote invece di modifica

  7. #7

    Re: Funzione da richiamare due volte nella pagina

    Originariamente inviato da fmortara
    codice:
    function countdown() {
    
    	if(mancanti>0) {
    		mancanti--;
    		secondi = mancanti;
    		giorni = parseInt(secondi/86400);
    		secondi = secondi - (giorni * 86400);
    		ore = parseInt(secondi/3600);
    		secondi = secondi - (ore * 3600);
    		minuti = parseInt(secondi/60);
    		secondi = secondi - (minuti * 60);
    		messaggio = (giorni>0) ? giorni+"d " : "";
    		messaggio = (giorni>0 || ore>0) ? messaggio+ore+"h " : "";
    		messaggio = (giorni>0 || ore>0 || minuti>0) ? messaggio+minuti+"m " : "";
    		messaggio = messaggio+secondi+"s";
    		document.getElementById(iditem).innerHTML = messaggio;
    		setTimeout("countdown()",1000);
    	}
    	else
    	{
    		messaggio = "{EXPIRED}";
    		document.getElementById(iditem).innerHTML = messaggio;
    	}
    }
    La funzione la richiamo in questo modo:
    codice:
    <script type="text/javascript">
    	var mancanti = 60000;
    	var iditem = 'timeleft-1';
    	window.onload=countdown();
    </script>
    
    <script type="text/javascript">
    	var mancanti = 60000;
    	var iditem = 'timeleft-2';
    	window.onload=countdown();
    </script>
    Personalmente passerei mancanti e iditem come parametri alla funzione...

    Codice PHP:
    function countdown(mancanti,iditem) {

        if(
    mancanti>0) {
            
    mancanti--;
            
    secondi mancanti;
            
    giorni parseInt(secondi/86400);
            
    secondi secondi - (giorni 86400);
            
    ore parseInt(secondi/3600);
            
    secondi secondi - (ore 3600);
            
    minuti parseInt(secondi/60);
            
    secondi secondi - (minuti 60);
            
    messaggio = (giorni>0) ? giorni+"d " "";
            
    messaggio = (giorni>|| ore>0) ? messaggio+ore+"h " "";
            
    messaggio = (giorni>|| ore>|| minuti>0) ? messaggio+minuti+"m " "";
            
    messaggio messaggio+secondi+"s";
            
    document.getElementById(iditem).innerHTML messaggio;
            
    setTimeout("countdown("+mancanti+",'"+iditem+"')",1000);
        }
        else
        {
            
    messaggio "{EXPIRED}";
            
    document.getElementById(iditem).innerHTML messaggio;
        }
    }

    <
    script type="text/javascript">
        
    window.onload=countdown(60000,'timeleft-1');
    </script>

    <script type="text/javascript">
        window.onload=countdown(60000,'timeleft-2');
    </script> 
    Non ho provato, ma immagino potrebbe funzionare.

  8. #8
    Perfetto, la funzione di dvds funziona.
    Avevo risolto richiamando più volte la funzione inline con nomi diversi, ma a volte sottraeva 2 secondi per volta da entrambi i countdown.

    Al momento devo controllare se anche cosi lo fa.
    Ciao!

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.