Newsgroup: it.comp.lang.javascript
Titolo: Problema sul focus

Ciao,
ho una table con molte colonne che ho messo in un div con dimensione
fissa su cui ho attivato la sroolbar in modo tale da visualizzare 10
colonne per volta. Alla pressione di un tasto nella pagina, devo
visualizzare le ultime 10 colonne. Ho provato a mettere il focus sul tr
relativo all'ultima colonna oppure su uno dei td ma non funziona.
Come posso fare?
Grazie!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 relativo all'ultima colonna oppure su uno dei td ma non funziona.
Per funzionare dovrebbe esserci un elemento che acquisisce effettivamente
il focus utente. Qualcosa tipo un link, ad esempio.
Vi sono diversi approcci che puoi utilizzare per realizzare ciò che vuoi.
Uno fa uso del DOM level 0, quindi supportato sicuramente da IE e Gecko.
Ponendo che il tuo "div" con scrollbar si chiami "container":
	var cont=document.getElementById("container");
	cont.scrollLeft=cont.scrollWidth-cont.clientWidth;
Questo codice lo farà "scrollare" fino in fondo.
In alternativa, dovresti avere un qualsiasi link posto sulla colonna da cui
vuoi iniziare la visualizzazione:
	<tr>
		<td><a href="#" id="bookmark">a link</a></td>
	..
	</tr>
e poi fare come avevi pensato tu, ovvero assegnare il focus:
	document.getElementById("bookmark").focus();
Questo approccio va bene se hai già un link sulla colonna, non ha senso
crearne uno unicamente per fargli fare da segnaposto.. soprattutto per
questioni funzionali e di layout.
L'ultimo approccio, è quello classico. Ma ti cambia l'url (ti cambia l'url,
ma non ti ricarica la pagina). Basta utilizzare un tag "A" per quello che
è. Un "anchor":
	<tr>
		<td><a name="bookmark"></a></td>
	..
	</tr>
E da codice:
	window.location.hash="#bookmark";
Qui non hai problemi "visivi", ma ti ritrovi con l'url della pagina
modificato.
Ti ho elencato bene o male i primi metodi che mi sono venuti in mente, con
pro e contro. Vedi un po' tu quale ti conviene usare.
-- 
~ La donna è un male, ma un male necessario. (Aulo Gellio)

Grazie mille, la soluzione DOM č andata benissimo per scrollare a 
fine/inizio tabella. 
Ora perň devo anche poter selezionare da una combo le varie colonne 
e quindi la colonna selezionata mi si deve piazzare al centro 
del div (ovviamente fatta esclusione per le prime 5 e ultime 5 che si
devono allineare a sinistra/destra).
Sulle colonne non ho dei link, perň ho pensanto di affiancare ad ogni 
intestazione un link vuoto e di "giocare" sul focus.
Cosě funziona, ma mi chiedevo se c'era una soluzione piů elegante, ad
esempio sfruttando anche in questo caso il DOM.
La soluzione dell'anchor non va bene, perchč tutta la pagina mi si 
sposta in verticale allineandosi in alto allo schermo.
Grazie ancora.
Ciao


 devono allineare a sinistra/destra).
Se ho ben capito, il codice è qualcosa del genere:
 
function centerColumnInViewport(iCol){
	var 	cont=document.getElementById("container"),
		col=cont.getElementsByTagName("tr")[0].cells[iCol];
	cont.scrollLeft=col.offsetLeft-(cont.clientWidth-col.offsetWidth)/2;
}
In ogni caso, giocando con queste proprietà dovresti riuscire a fare più o
meno tutto quello che ti serve.
-- 
~ Religions change, but beer and wine remain.
(Harvey Allen)

 devono allineare a sinistra/destra).
Se ho ben capito, il codice è qualcosa del genere:
 
function centerColumnInViewport(iCol){
	var 	cont=document.getElementById("container"),
		col=cont.getElementsByTagName("tr")[0].cells[iCol];
	cont.scrollLeft=col.offsetLeft-(cont.clientWidth-col.offsetWidth)/2;
}
In ogni caso, giocando con queste proprietà dovresti riuscire a fare più o
meno tutto quello che ti serve.
Nota: iCol è l'indice della colonna da centrare, come avrai capito. Esso
parte da "0". Quindi se vuoi centrare, ad esempio, la sesta colonna dovrai
inserire "5" come valore della funzione.


E' perfetto, grazie.
Cmq il problema del browser non sussiste perchè la mia applicazioe 
dovrà girare solo con Explorer.
