PDA

View Full Version : [JS] Una funzione si interrompe dopo un FOR, perchè?


XSonic
04-02-2007, 12:25
Risolto: Soluzione al post 4 :D

for (j=0;j<20;j++){
if (j==id) document.getElementById(tabs[j]).style.display = '';
else document.getElementById(tabs[j]).style.display = 'none';
}

Questa funzione associata ad un array tabs[] contenenti i nomi dei div mi permette di nascondere tutti i tab ad eccezione di quello che ha il nome in id

Funziona alla meraviglia però non so come mai dopo la chiusura del for non esegue nessun altro comando, niente, la funzione che contiene questo pezzo si interrompe dopo la } di for

C'è qualche errore?
Provato in IE7 e FF2 :cry:
:help:

EDIT: Ho notato che se tolgo la parte .style.display... la funzione va avanti... allora come la devo implementare?

andbin
04-02-2007, 15:29
for (j=0;j<20;j++){
if (j==id) document.getElementById(tabs[j]).style.display = '';
else document.getElementById(tabs[j]).style.display = 'none';
}

Questa funzione associata ad un array tabs[] contenenti i nomi dei div mi permette di nascondere tutti i tab ad eccezione di quello che ha il nome in id

Funziona alla meraviglia però non so come mai dopo la chiusura del for non esegue nessun altro comando, niente, la funzione che contiene questo pezzo si interrompe dopo la } di forIl codice, tecnicamente, è corretto. Comunque in 'id' non puoi avere un nome. Se 'j' va da 0 a 19, allora in 'id' dovrai avere un numero compreso in questo intervallo che indica quale div visualizzare.
Poi bisognerebbe vedere cosa contiene l'array tabs e se tutti i div hanno un id corretto.

XSonic
04-02-2007, 16:06
Questa è la funzione completa
var tabs = Array(
'm0',
'main',
'hotel',
'rist',
'gall',
'map',
'plist',
'cont',
'form',
'foto',
'm1',
'm2',
'm3',
'm4',
'm5',
'm6'
);

function mostra(id){
for (j=0;j<20;j++){
if (j==id) document.getElementById(tabs[j]).style.display = '';
else document.getElementById(tabs[j]).style.display = 'none';
}
altrafunzione();
return 0;
}
Il suo lavoro lo fa bene ma non vuole farlo fare alle altre :fagiano:
Cmq diciamo che ho risolto ottimizzando il codice e anteponendo le altre funzioni a questa, però vorrei capire perchè fa così, può servire in altri casi

OPS: che caxxata... quando andava a controllare tabs[17] trovava un null e si bloccava :stordita:
Ho risolto mettendo j<16 al posto di j<20

Fortuna che mi hai fatto pensare all'array, grazie!

andbin
04-02-2007, 16:14
Questa è la funzione completa
[...]Beh, scusa ... ma hai contato quanti elementi hai in tabs??? Ne hai 16! Se nel ciclo for la 'j' arriva fino a 19, allora appena arriva a 16, il metodo getElementById ritornerà null, pertanto è un errore visto che non può trovare alcuna proprietà style.

XSonic
04-02-2007, 16:35
Sisi, l'ho notato poco dopo che ho scritto il messaggio #3, sono andato a modificarlo e poi m'han chiamato :D

Ah, ho dovuto togliere anche return 0 perchè "inspiegabilmente" stampava 0 quando le eseguivo :asd:
L'avevo messo per vedere se il problema fosse quello ma... :D