Visualizzazione dei risultati da 1 a 3 su 3

Discussione: ciclo for con funzione

  1. #1
    Utente di HTML.it L'avatar di Base
    Registrato dal
    Apr 2001
    Messaggi
    822

    ciclo for con funzione

    scusate ma non posso fare un cosa del genere?
    codice:
    tot = 20;
    for (n=0; n<tot; n++) {
    	all_c["bt_"+n].onRelease = function() {
    		carica(all_c["bt_"+n+"_nome"])
                              trace (n);
    	};
    }
    cioè vorrei associare ad n bottoni una mia funzione.
    è ore che ci sbatto la testa e non ne vengo a capo.
    il valore di n nel ciclo for all'interno della funzione "carica" rimane sempre uguale a tot (20).
    il trace invece mi restituisce correttamente da 0 a 20.
    come mai ???

    aiuto vi prego.

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    allora, il fatto è che l'evento onRelease come gli altri eventi in Flash è di tipo asincrono, ossia quando viene generato dal codice, non si sa esattamente quando avverrà nel tempo, mentre il ciclo viene comunque eseguito fino alla fine non appena viene incontrato dal parser

    la discrepanza di tempi fa sì che "n" all'interno dell'onRelease venga considerato solo nel momento in cui il ciclo è terminato e quindi per tutti i pulsanti risulterà diverso da quello che ci si aspetta (nel tuo codice sarà sempre uguale a 20 per tutti i pulsanti).

    la soluzione più semplice per raggirare il problema è di assegnare direttamente al pulsante il numero di n interessato al momento e di richiamarlo all'interno dell'evento onRelease attraverso la chiave "this", che appunto all'interno di onRelease equivarrebbe all'oggetto che lo richiama

    codice:
    tot = 20;
    for (n=0; n<tot; n++) {
    	all_c["bt_"+n].n = n;
    	all_c["bt_"+n].onRelease = function() {
    		carica(all_c["bt_"+this.n+"_nome"])
                    trace (this.n);
    	};
    }
    in rosso le modifiche apportate

  3. #3
    Utente di HTML.it L'avatar di Base
    Registrato dal
    Apr 2001
    Messaggi
    822
    Originariamente inviato da and80
    allora, il fatto è che l'evento onRelease come gli altri eventi in Flash è di tipo asincrono, ossia quando viene generato dal codice, non si sa esattamente quando avverrà nel tempo, mentre il ciclo viene comunque eseguito fino alla fine non appena viene incontrato dal parser

    la discrepanza di tempi fa sì che "n" all'interno dell'onRelease venga considerato solo nel momento in cui il ciclo è terminato e quindi per tutti i pulsanti risulterà diverso da quello che ci si aspetta (nel tuo codice sarà sempre uguale a 20 per tutti i pulsanti).

    la soluzione più semplice per raggirare il problema è di assegnare direttamente al pulsante il numero di n interessato al momento e di richiamarlo all'interno dell'evento onRelease attraverso la chiave "this", che appunto all'interno di onRelease equivarrebbe all'oggetto che lo richiama

    codice:
    tot = 20;
    for (n=0; n<tot; n++) {
    	all_c["bt_"+n].n = n;
    	all_c["bt_"+n].onRelease = function() {
    		carica(all_c["bt_"+this.n+"_nome"])
                    trace (this.n);
    	};
    }
    in rosso le modifiche apportate


    semplicemente... perfetto. grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.