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

    Ciclo for non va oltre 18 ripetizioni

    Buongiorno a tutti, ho un problema con un ciclo for che non funziona correttamente, nel senso che se il numero di ripetizioni è superiore a 18 si blocca:

    codice:
    function cambiastile(sender,nome_div,nome_div2,nome_div3,nome_div4,puls_ap2,puls_ap3,puls_ap4,blocco,b1,b2,b3,ultimo,it,tot_pages) { 
    var d = tot_pages; 
    for (var ap=1;ap<=d;ap++){ 
    ap = ap + ""; 
    for (var bp=1;bp<=4;bp++){ 
    bp = bp + ""; 
    var cp = ap+bp; 
    var iddiv=document.getElementById("apri"+cp);
    iddiv.className="annuncio_small";
    
    var idpuls=document.getElementById("puls"+cp);
    idpuls.className="annuncio_apri"; 
    
    var idblocco=document.getElementById("blocco"+ap+1);
    idblocco.className="annuncio_blocco1_b";
    
    var idblocco=document.getElementById("blocco"+ap+3);
    idblocco.className="annuncio_blocco3_b"; 
    
    var idblocco=document.getElementById("blocco"+ap+2);
    idblocco.className="annuncio_blocco2_b";
    
    var idultimo=document.getElementById("ultimo"+ap);
    idultimo.className="annuncio_ultimo";
    }
    }
    altro codice....
    praticamente questa funzione mi serve per cambiare la classe css ad alcuni div della pagina che vengono paginati a gruppi di 4 in tot slide (tot_pages).
    Il problema sorge quando il numero totale di slide è superiore a 18, cioè da 19 in su e non riesco a capire per quale motivo. Fino a 18 funziona perfettamente...

    La prima versione di questa funzione non aveva il cliclo for e mi cambiava correttamente i css ma ho dovuto implementarla in questo modo perchè le slide vengono create dinamicamente in php pescando i dati dal db e gli id dei div anche sono creati dinamicamente, ma mi cambiava la classe solo ai div della slide visualizzata.

    Qualcuno sa spiegarmi cosa sbaglio? il codice successivo al for non ha problemi e non dovrebbe centrare nulla perchè influisce solo sulla slide visualizzata.

    Sono abbastanza nabbo in javascript...sono già fin troppo stupito di essere riuscito a farlo funzionare finora...

    Spero mi possiate aiutare.

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998

    Re: Ciclo for non va oltre 18 ripetizioni

    codice:
    for (var ap=1;ap<=d;ap++){ 
    ap = ap + "";
    Non puoi usare una variabile trasformata in stringa come indice di un ciclo... usa una variabile d'appoggio

    codice:
    for (var ap=1;ap<=d;ap++){ 
    str_ap = ap + "";
    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

    Re: Re: Ciclo for non va oltre 18 ripetizioni

    Originariamente inviato da br1
    codice:
    for (var ap=1;ap<=d;ap++){ 
    ap = ap + "";
    Non puoi usare una variabile trasformata in stringa come indice di un ciclo... usa una variabile d'appoggio

    codice:
    for (var ap=1;ap<=d;ap++){ 
    str_ap = ap + "";
    Ciao, grazie per la risposta, effettivamente non mi ero accorto di questo errore però non è questo il problema, sono riuscito a trovare cos'è che lo blocca, praticamente se nell'ultima slide non ci sono tutti e 4 i div, si ritrova a dover cambiare classe ad un id inesistente. Quindi vorrei capire come fare a dirgli che se gli torna un risultato null deve andare avanti. Non so se sono stato chiaro

    In poche parole dovrei aggiungere un controllo del tipo:

    if(iddiv == null){
    non fare nulla e procedi con le azioni successive;
    }

    ma non so come inserirglielo

  4. #4
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669

    Re: Re: Re: Ciclo for non va oltre 18 ripetizioni

    Originariamente inviato da Veleno-CG
    if(iddiv == null){
    non fare nulla e procedi con le azioni successive;
    }

    ma non so come inserirglielo
    codice:
    if (iddiv === null) {
      continue;
    }
    Il comando continue farà saltare il blocco di istruzioni che seguono per passare al ciclo successivo.

    Oppure, se vuoi interrompere del tutto il ciclo:

    codice:
    if (iddiv === null) {
      break;
    }

  5. #5

    Re: Re: Re: Re: Ciclo for non va oltre 18 ripetizioni

    Originariamente inviato da carlomarx
    codice:
    if (iddiv === null) {
      continue;
    }
    Il comando continue farà saltare il blocco di istruzioni che seguono per passare al ciclo successivo.
    Grazie mille

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.