Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093

    js - ciclare contenutoo non funziona..

    Ciao a tutti,

    come mai nonmi funziona?

    <HTML>
    <HEAD>
    <script>
    // PARTE STATICA OGGETTO AREA
    function Oggettino(div, tempo, contenuto){
    this.div=div;
    this.tempo=tempo;
    this.contenuto=contenuto;
    }


    // Parte da generare dinamicamente
    // --> COSTRUTTORE
    var cont = new Array();

    function costruttore (div, tempo, contenuto) {
    cont[cont.length]=new Oggettino(div, tempo, contenuto);
    }


    // --> CREAZIONE JS CHE GESTISCE TUTTO
    function Cicla(i){
    if(!i)i=0;
    var div = cont[i].div;
    var tempo = cont[i].tempo;
    div.innerHTML=''+cont[i].contenuto+'
    ';
    i++
    if(i==cont.length)i=0;
    setTimeout('Cicla('+i+')',1000)
    }

    </script>
    </HEAD>

    <BODY>

    <div id="divNews"></div>
    <script>
    costruttore("divNews", 1000, "ciao ippo");
    Cicla();
    alert(cont[0].div);
    </script>
    </BODY>
    </HTML>


    secondo voi, io non ci trovo errore...mi sembra fili di logica...
    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093
    è possibile secondo voi fare una cosa del genere?

    function costruttore (nome, div, tempo, contenuto) {
    eval(nome)[eval(nome).length]=new Oggettino(div, tempo, contenuto);
    }

    e richiamarla cosi:

    cosstruttore("nome", "div",...);

    mi crea un oggetto nome?...non funziona ma forse non posso...o sbaglio qualcosa?


    grazie

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Originariamente inviato da roboro
    è possibile secondo voi fare una cosa del genere?

    function costruttore (nome, div, tempo, contenuto) {
    eval(nome)[eval(nome).length]=new Oggettino(div, tempo, contenuto);
    }
    ...
    Semmai la sintassi sarebbe:
    eval(nome+"["+nome+".length]") = new Oggettino ...

    Solo che eval() e` deprecata, per cui e` sconsigliabile

    E comunque dipende molto da cosa sono i parametri passati (nel mio esempio nome deve essere una stringa, ma deve pre-esistere anche un vettore nome).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093
    Grazie mich!

    non c'è nulla che posso usare invece di eval()?
    Il mio parametro è una stringa..semplicemente una stringa, il vvettore pensavo di crearlo comunque dentro la funzione che crea l' array e non globale...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093
    Questa è l' ultima versione secondo quando detto...ma non va...

    function Cicla(i, nome){
    if(!i)i=0;
    var div = document.getElementById('divNews');

    var tempo = eval(nome+"["+i+"]").div;

    div.innerHTML=''+cont[i].area+'
    '+cont[i].contenuto
    i++
    if(i==cont.length)i=0;
    setTimeout('Cicla('+i+')',tempo)
    }
    </script>

    </HEAD>
    <BODY onload="Cicla(0, cont)">



  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Dipende da cosa vuoi fare. COn gli elementi che ho non so dirti come sostituire l'eval.

    Una variable locale ad una funzine non ha effetti nellapagina Web e/o in altre funzioni. Quindi nel tuo caso il vettore deve essere globale.

    ma se la funzione Oggettino() crea un oggetto, non ti basta scrivere:
    nome[nome.length] = Oggettino(...)

    Oppure, se vuoi passare l'oggetto alla funizione:

    function costruttore (oggetto, ...) {
    oggetto[oggetto.length] = Oggettino(...);
    }

    dove alla funzione costruttore passi l'oggetto del vettore che devi creare, non il suo nome.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093
    ti spiego commentando l' esempio

    <HTML>
    <HEAD>

    questa va bene, crea l' ogg e qui tutto bene
    <script>
    function Oggettino(area,contenuto,tempo){
    this.area=area;
    this.contenuto=contenuto;
    this.tempo=tempo;
    }

    Qua avro gli array creati da una pagina perl in fila..
    var cont = new Array();
    cont[cont.length]=new Oggettino('a','prima news',3000);
    cont[cont.length]=new Oggettino('b','seconda news',5000);

    var secondo = new Array();
    secondo[secondo.length]=new Oggettino('a','prima news',3000);
    secondo[secondo.length]=new Oggettino('b','seconda news',5000);

    ecc
    ecc

    e fin qui nessun problema...
    Il problema arriva a questo punto...
    Gliarray creato contengono dei contenuti da ciclare dentro a determinate aree della pagina (DIV)...

    La funzione cicla dovrebbe essere richiamata per ogni ARRAY...ecco perche cercavo di creare la variabile al volo..
    Cicla quindi riceve il nome del div, e dell' array da qui pescare i contenuti e parte a ciclare il tutto...
    Non so come inserire dinamicamente il div e l' array...tutto qui Adesso la funzione cicla è "statica" per un array e un div solo...questo è il problema...

    // PARTE STATICA CHE CICLA I CONTENUTI
    function Cicla(i, nome_array. nome_div){
    if(!i)i=0;
    var div = document.getElementById('divNews');

    var tempo = eval(nome+"["+i+"]").div;

    div.innerHTML=''+cont[i].area+'
    '+cont[i].contenuto
    i++
    if(i==cont.length)i=0;
    setTimeout('Cicla('+i+')',tempo)
    }
    </script>

    </HEAD>
    <BODY onload="Cicla(0, cont)">
    <div id="divNews"></div>
    <div id="secondo"></div>
    </body>
    </HTML>


    Spero di averti fornito tutte le info per aiutarmi, non so proprio come fare...

    grazie

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Anzitutto vedo che usi la varibile div; e` nome del DOM, quindi non puoi usarla (potresti crearti altri problemi: meglio evitare).

    var tempo = eval(nome+"["+i+"]").div;
    potresti (forse) scirverla:
    var tempo = document.getElementById(nome[i]);

    dove nome e` l'oggetto vettore passato alla funzione

    oppure:
    var tempo = document.getElementById(nome+"["+i+"]");


    Comunque non riesco a seguire tutto il ragionamento: ho delle lacune dal punto di vista del JS.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    1,093
    no mich non è quello che devo fare...

    semplicemente devo passare a questa funzione l' array da uutilizzare invece dello statico cont..

    function Cicla(i){
    if(!i)i=0;
    var div = document.getElementById('divNews');
    var tempo = cont[i].tempo;
    div.innerHTML=''+cont[i].titolo+'
    '+cont[i].testo
    i++
    if(i==cont.length)i=0;
    setTimeout('Cicla('+i+')',tempo)
    }

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Ma per semplificare, div non potrebbe essere globale?

    Comunque non ho capito la prima riga:
    if(!i) i=0;

    se i e` diverso da zero, viene azzerato: tanto vale non passarlo, ed azzerarlo all'inizio della funzione.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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.