Visualizzazione dei risultati da 1 a 8 su 8

Discussione: problema con ciclo for

  1. #1

    problema con ciclo for

    Salve ho questo script:

    codice:
    for(var menuopen=0;menuopen<=5;menuopen++){
    			if($("ul.m"+menuopen).is(":visible")){
    				$("ul.m"+menuopen).slideUp("fast", function(){
    					alert(menuopen);
    					$("li#m" + menuopen + ">a").removeClass("menucaton").addClass("menucat");
    					$("ul.m" + menuopen + ">li").remove()
    					$("ul.m" + menuopen).css("display","none");
    				});
    			}
    		}
    cioè verifico se un menu è aperto così lo chiudo ma il fatto e che io conto fino a 5 nel ciclo for ma in alert(menuopen) mi da 6.

    comè possibile ciò????

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Se usi menuopen++ l'incremento viene fatto al termine del ciclo...
    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

  3. #3
    be certo che deve essere fatto al termine del ciclo ma se la condizione è situato al terzo ciclo mi da sempre 6 in alert.

  4. #4
    e alert è dentro la condizione come fa a dare 6 e questo che non capisco

  5. #5
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    dà 6 (correttamente) perchè hai creato una closure
    quando l'evento si verifica, il for ha portato la variabile menuopen a 6 , pertanto l'alert stampa l'ultimo valore di menuopen all'interno del ciclo (mentre tu ti aspetti che venga stampato il valore che era attuale nella singola iterazione).
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  6. #6
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Originariamente inviato da fcaldera
    dà 6 (correttamente) perchè hai creato una closure
    quando l'evento si verifica, il for ha portato la variabile menuopen a 6 , pertanto l'alert stampa l'ultimo valore di menuopen all'interno del ciclo (mentre tu ti aspetti che venga stampato il valore che era attuale nella singola iterazione).
    Non saprei (anzi non so) dirlo meglio
    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

  7. #7
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924

    Re: problema con ciclo for

    a occhio devi modificare in

    codice:
    for(var menuopen=0;menuopen<=5;menuopen++){
    	if($("ul.m"+menuopen).is(":visible")) {
                   
                   (function(i) {
       
     	           $("ul.m"+i).slideUp("fast", function(){
    			alert(i);
    			$("li#m" + i + ">a").removeClass("menucaton").addClass("menucat");
    			$("ul.m" + i + ">li").remove()
    			$("ul.m" + i).css("display","none");
    		    });
    
                    })(menuopen);
    	}
    }
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  8. #8
    e si oppure imposto il valore invece che 5 a 4 perchè appunto mi ritorna 5.

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.