Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di softoxy
    Registrato dal
    Apr 2001
    Messaggi
    202

    variabile non aggiornata in un ciclo

    il mio problema è nell'aggiornamento di una variabile all'interno di un ciclo for. Il codice è il seguente:

    var tBody = document.getElementById('idTable').tBodies[0];
    var rows = tBody.rows;
    var n = rows.length;

    for (var i = row; i < n; i++) {
    var child = rows[i];
    var onMouseOver = new Function("changeCss('id" + (i - 1) + "','subRowMouseOver');");
    var tr = tBody.getElementsByTagName("tr");
    tr.onmouseover = function () {onMouseOver();};
    ........
    }
    .....
    tBody.deleteRow(row - 1);

    l'operazione viene associata all'ultimo valore di i e non in funzione del ciclo.

    sapete come mai?

    grazie.
    Soft!2001

  2. #2
    Perchè la funzione deleteRow è all'esterno del ciclo, se è questo a cui ti riferisci.
    Prova ad inserire un alert o un wondow.status per effettuare un debug del valore i.

  3. #3
    Utente di HTML.it L'avatar di softoxy
    Registrato dal
    Apr 2001
    Messaggi
    202

    ..grazie

    grazie per la risposta.

    non è quello il problema.

    in sostanza devo cancellare una riga da una tabella e devo ripristinare lo stato delle righe precedenti, compreso il mouserover e il mouseout.

    il ciclo "for" parte dalla riga da cancellare fino all'ultima riscrivendo gli eventi, l'ultima viene cancellata.

    se uso il metodo:

    tr[0].setAttribute('onmouseover', "changeCss('id" + (i - 1) + "','subRowMouseOver')");

    sempre all'interno del ciclo, i metodi vengono riscritti correttamente. L'unico difetto di questo modo di lavorare è che funziona solo su FireFox, mentre dovrebbe funzionaer anche su IExplorer.
    Allora definisco una nuova funzione con new Function nella speranza che scriva una nuova funzione con i parametri aggiornati, invece mantiene gli stessi come se puntasse sempre allo stesso indirizzo.

    penso di aver incasinato di più le idee........
    Soft!2001

  4. #4
    Utente di HTML.it L'avatar di softoxy
    Registrato dal
    Apr 2001
    Messaggi
    202

    ...

    dov'è l'arcano?
    Soft!2001

  5. #5
    Non riesco ad individuare l'assegnazione della variabile row.

  6. #6
    Utente di HTML.it L'avatar di softoxy
    Registrato dal
    Apr 2001
    Messaggi
    202

    ........

    ah scusa:
    "row" è la riga che si vuole cancellare nella tabella, puoi dargli il valore che vuoi a partire da 1....
    Soft!2001

  7. #7
    Il fatto è che non vedo relazioni di dipendenza fra il ciclo for (che assegna solo eventi) alla variabile row che definisce quale riga va cancellata.

  8. #8
    Utente di HTML.it L'avatar di softoxy
    Registrato dal
    Apr 2001
    Messaggi
    202

    ............

    per cancellare una riga in una tabella riscrivo tutte le righe che seguono quella da cancellare e poi cancello l'ultima. es:

    1 a
    2 b
    3 c
    4 d

    per cancellare b, passo row = 2

    riscrivo la riga 2 b come 2 c
    riscrivo la riga 3 c come 3 d

    cancello l'ultima riga 4 d
    risultato
    1 a
    2 c
    3 d

    riscrivo per ogni riga sia il testo che gli eventi associati, come onmouseover per cambiare il colore di riga quando il puntatore passa sopra la riga.

    il problema è quando definisco una nuova funziona, passandogli come parametro (i - 1) quindi la riga i-esima, ma quando viene interpretata l'argomento alla nuova funzione è sempre lo stesso, non i che varia da row ad n, ma i = n - 1, come se puntasse sempre alla stessa area di memoria invece di allocarne di nuova.
    Su firefox non ho utilizzato questo procedimento ma semplicemente assegnado all'attributo "onmouseover" del tag "td" la funzione "onChageCss" al variare di i.
    Su IExplorer non funziona passandogli solo l'attributo allora devo adottare questa soluzione macchinosa, ma mi da questo problema.
    se vuoi riscrivo il codice che possa essere eseguito, magari si capisce meglio il problema.
    cosa ne dici?
    Soft!2001

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2000
    Messaggi
    1,309
    Scusate se riapro questo vecchio post, ma è proprio il mio stesso problema, in pratica se nel ciclo assegno l'onclick ad un td creato dinamicamente con questa istruzione

    strCell[i].setAttribute('onclick', "test('" + p + "')");

    funziona benissimo solo co fire fox, ma con ie 6 e 7 non funziona, mentre se uso questa istruzione

    strCell[i].onclick = function(){ test(strDayNumberSms[i].datePro);}

    su tutti e tre i browser funziona ma restituisce sempre l'ultimo valore di i
    Qualcuno sa aiutarmi o ha già risolto questo problema?
    Ciao By Peter_Pan...

  10. #10
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    Originariamente inviato da Peter_Pan
    strCell[i].onclick = function(){ test(strDayNumberSms[i].datePro);}
    http://forum.html.it/forum/showthrea...8#post11118638

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.