Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Experiment8
    Registrato dal
    Jun 2012
    residenza
    Milano
    Messaggi
    254

    Problema funzione set e clear Interval

    Ciao

    Ho un problema con questa funzione del mio sito:

    codice:
    function addressSniffer(history, enabled){
    	 var oldLocation = location.href, checker;
    	 clearInterval(checker);
    	 checker = setInterval(function(){
    		 if(enabled){
    			 if(oldLocation != location.href){
    				 var position = $.inArray(location.href, history);
    				 if(position > -1){
    					 var target = history[position], loadingLayer = $('#loadingLayer'), siteFooter = $('#siteFooter');
    					 changePage(target, history, loadingLayer, siteFooter);
    					 addressSniffer(history, false);
    					 }
    				 }
    			 }
    		 else{
    			 clearInterval(checker);
    			 }
    		 }, 1000);
    	}
    Il problema è che nel momento in cui la funzione arriva all'ultimo "if", quello con "position > -1", si richiama da sola e si dovrebbe disattivare l'intervallo, invece non ne vuole sapere e continua imperterrito a girare, senza considerare il clearInterval.

    Dove sbaglio??

    Grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Sbagli perché checker è una variabile locale e nel momento in cui richiami nuovamente la funzione questa non fa altro che lanciare clearInterval(undefined). Per risolvere in modo pratico questi tipi di problemi senza sporcare il global scope tempo fa avevo scritto questa minuscola libreria: https://developer.mozilla.org/en-US/...ttle_framework ("A little framework").
    Non ho capito bene cosa fa il tuo codice... ma se implementi quella libreria ti verrà fuori qualcosa di simile a questo...:

    codice:
    var oChecker = new MiniDaemon({
    	"oldLocation": location.href,
    	"enabled": false
    }, function () {
    	if (this.enabled) {
    		if (this.oldLocation != location.href){
    			var position = $.inArray(location.href, history);
    			if (position > -1) {
    				var target = history[position], loadingLayer = $('#loadingLayer'), siteFooter = $('#siteFooter');
    				changePage(target, history, loadingLayer, siteFooter);
    				addressSniffer(history, false);
    			}
    		}
    	} else {
    		// return false equivale qui a clearInterval()!
    		return false;
    	}
    }, 1000);
    
    
    function addressSniffer (history, bEnabled) {
    	oChecker.owner.oldLocation = location.href;
    	oChecker.owner.enabled = bEnabled;
    	oChecker.start();
    }
    Tutto ciò che fai con jQuery puoi farlo meglio e con la metà del codice in puro JavaScript.

  3. #3
    Utente di HTML.it L'avatar di Experiment8
    Registrato dal
    Jun 2012
    residenza
    Milano
    Messaggi
    254
    Ok grazie mille proverò sicuramente il tuo framework.

    Giusto per info (magari c'è una soluzione più semplice), la funzione serve a fare il detect di un qualsiasi cambiamento della barra degli indirizzi del browser. Il problema è che nel momento in cui viene caricata un altra pagina nel mio sito (tramite ajax), questa funzione non dovrebbe funzionare per evitare che faccia (come giusto) il detect del cambiamento di indirizzo.

    Tutto questo lo sto facendo perchè: L'ajax funziona bene e cambia le pagine regolarmente aggiornando la cronologia (su browser nuovi, ovviamente per IE inventerò qualcosa di diverso), il problema è che dopo aver navigato, se uno preme il bottone "indietro" del browser, l'indirizzo cambia, ma non la pagina in se.

    Puoi vederlo tu stesso sul mio sito:

    http://www.robertolonardi.com/

    Ti ringrazio per la disponibilità

    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.