Newsgroup: it.comp.lang.javascript
Titolo: Intercettare e modificare il tabindex

Ciao a tutti!
Vorrei fare in JS una funzione che al tabindex X (dove X e' una variabile)
lui prende e resetta il tabindex corrente.
Vedo di spiegarmi:
Sto' scrivendo diverse pagine in ASP (Scelte aziendali :| ), in queste
pagine ci sono diversi oggetti (input, link etc...), alcuni di questi
oggetti sono di sola visualizzazione (e percio' non ci si deve fermare con
il tabindex!), per automatizzare l'assegnazione del tabindex, ho creato una
stupidissima funzione che ogni volta che viene richiamata mi restituiscr una
stringa cosi' formata tabindex="valore" dove valore e' il numero che viene
progressivamente aumentato, di un'unita', ogni volta che la funzione viene
richiamata.
Fino a qui tutto bene, ma quando viene finito il ciclo dei tabindex
assegnati, il tab inizia ad andare in tutte le posizioni impossibili &
impensabili della pagina che prima sono state snobbate.
Questo vorrei evitarlo con una funzione in JS che controlla ogni volta il
valore del tabindex attuale, se e' maggiore dell'ultimo tabindex assegnato
(questo valore lo conosco), deve ripartire dal tabindex=1
E' fattibile una cosa del genere?
Grazie e Ciao ;^)=
-- 
RedFoxy
A fox around web
Power at fox for a yiffing world!
Un forum per tutte le esigenze: 
http://forum.redfoxy.it

 il tabindex!)
Cioe' dei campi input o link che non devono essere attivi?
Rendili disabled.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)
Now playing: "raf in tutti i miei giorni"

 Rendili disabled.
Non posso, li posso rendere solo readonly, il motivo e' semplice, alcuni
link devono essere funzionanti tramite mouse e alcuni campi text vengono
riempiti di dati che poi devono essere passati con la form (cosa che non
avviene con il disable)


 avviene con il disable)
Quello e' il meno, li rendi enabled nel submit o utilizzi dei campi hidden.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Alcune persone sono ancora vive per il semplice motivo che e'
illegale ucciderle.
Now playing: nothing

 hidden.
Volevo evitare questi lavori al volo durante il submit o l'utilizzo di campi
doppi... cmq per quei campi non c'e' problema, il problema e' quando il
tabindex se ne va in giro per la pagina...
Ciao ;^)=


 tabindex se ne va in giro per la pagina...
Non puoi amputare le mani delle persone da remoto, mi spiace.. La liberta'
dell'utente e' imprescindibile.
Anche se da quanto ho capito, il tuo e' un contesto di "software interno" e
non di web. Prova a spiegare meglio come funziona il discorso.


 discorso.
Si e' un software interno basato sul web solo eprche' deve essere
disponibile solo a pochi e specifici elementi sparsi a caso in giro...
abbiamo una pagina web con 5 <input type=text>, un <input type=button>, due
immagini con link (stampa e richiedi aiuto tecnico), un frame superiore e un
iframe per la visualizzazione di info (la pagina descritta e' di fantasia)
Di questi 5 <input type=text>, due sono SOLO di visualizzazione (readonly,
ma possono essere anche disabled), l'iframe mostra dei dati ma non ha niente
di interazione, il bottone scatena il submit, i due link servono solo di
rado (meglio mai, ma non si sa'... mai! :P ) ed in fine ci sono i tre campi
<input type=text> dove uno mette i dati.
ora avremo per il tab index la seguente assegnazione manuale:
<input type=text name=txt1 tabindex=1>
<input type=text name=txt2 tabindex=2>
<input type=text name=txt3 tabindex=3>
<input type=submit name=invia tabindex=4>
Quando la pagina viene caricata, nell'onload c'e'
document.forms[0].txt1.focus() cosi' che si posizioni nel primo campo text,
da quel momento, ad ogni colpo di tab, il focus saltera' lungo un percorso
ben stabilito, dalla txt1 al submit.
Ora pero' c'e' un problema, quando il focus arriva sull'ultimo elemento (il
bottone per il submit in questo caso, ma non e' detto!) tutto va bene, ma se
l'utente preme un'altra volta il tab il focus inizia a vagare per tutti gli
elementi che non hanno il tabindex e questo non deve succedere, in pratica,
stando all'esempio di prima, dove l'ultimo tabindex e' 4, vorrei sapere se
tramite JS posso controllare e modificare il tab index successivo per farlo
iniziare di nuovo dal primo tabindex, della serie if (tabindex>4) {
tabindex=1 }
Ora sono stato piu' chiaro? ^^


 tabindex=1 }
scusa ma se sono readOnly e perfino disabled, perche' non li rappresenti con
degli span anziche' con degli input?
piuttosto, potresti aggiungergli un gestore onFocus e fare qualcosa del
genere:
<form name="f">
   <input type="text" name="t0" tabIndex="1" value="ciao" />
   <input type="text" name="t1" tabIndex="2" value="ciao" />
   <input type="text" name="t2" tabIndex="3" value="ciao" />
   <input type="text" name="t3" readOnly onFocus="document.f.t0.focus();"
value="ciao" />
   <input type="text" name="t4" readOnly onFocus="document.f.t0.focus();"
value="ciao" />
   <input type="button" name="t5" tabIndex="4" value="ciao" />
</form>
brr.. rabbrividisco
--
artemis.alpeia
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Ora sono stato piu' chiaro? ^^
Si, ma il realizzare cio' che chiedi tu non ha molto a che vedere con la
richiesta iniziale.. insomma, certo che puoi controllare il focus, ma
questo non impedisce a chi usa l'applicativo di spostarsi altrove.. non so
se mi sono spiegato.
Se il problema e':
"arrivato all'ultimo elemento, posso far si' che si riposizioni sul primo
quando premo tab?" 
La risposta e' una, se il problema e': 
"all'interno di una form ho degli elementi cliccabili sul quale pero' non
voglio che l'utente vada con il tab, ma solo con il mouse.. posso farlo?" 
La risposta e', ovviamente, un'altra dato che il problema e' diverso.
Nel primo caso puoi fare qualcosa del genere:
<form ..>
	<input type="text" name="txt1" tabindex="1" />
	<input type="text" name="txt2" tabindex="2" />
	<input type="text" name="txt3" tabindex="3" />
	<input type="submit" name="invia" tabindex="4" onblur="this.txt1.focus()"
/>
</form>
Dato che questo codice lo componi lato server (ASP) sai tranquillamente
quando sei giunto all'ultimo elemento da comporre, e sai anche qual'e' il
primo elemento a cui hai dato il tabindex, quindi puoi benissimo fargli
scrivere un codice del genere.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
L'ingegnere non vive, funziona.
Now playing: nothing

 scrivere un codice del genere.
U_U ho riletto tutto il thread e la soluzione da te proposta e' sicuramente
piu' adeguata, se gli altri elementi devono comunque essere raggiungibili
via mouse (con la mia non lo sarebbero).
Tuttavia una elegante scappatoia sarebbe "simulare" i campi non editabili
con degli span e renderli comunque inviabili al server inserendone i valori
in campi hidden
--
artemis.alpeia e le scadenze di consegnaaaahh


 quindi puoi benissimo fargli scrivere un codice del genere.
Effettivamente cosi' funziona, ma non so' perche' ma c'e' qualcosa che mi
sfugge...


 sfugge...
Cos'e' che ti sfugge?
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Ci siamo fatti una scopata cosi' eccezionale che anche i vicini hanno
fumato una sigaretta.
Now playing: nothing

 Cos'e' che ti sfugge?
Mi sfugge il fatto che se clicco su un elemento escluso dal tabindex, questo
prende il focus e se faccio il tab addio sequenza...


 prende il focus e se faccio il tab addio sequenza...
Aridaje. Si ritorna al discorso di prima. Se la tua questione e':
"perche' arrivado DOPO l'ultimo elemento con il
tabindex selezionato deve ritornare al primo
stando all'esempio la sequenza sarebbe:(..)"
E' un conto, ed ho risposto ampiamente a questa.
Se invece il punto non e' solo questo, ma "non voglio che l'utente possa
spostarsi con il tab su elementi che non definisco io con il tabindex" e'
un altro.
Il fatto che tu imposti il tabindex non esclude gli altri elementi
dall'iterazione, puoi - come ho detto - solo controllare il focus in quel
modo descritto.
Se un utente clicca su un elemento *che*puo'*cliccare* questo prende il
focus, non ci puoi fare niente.
A meno che tu non vada a rimapparti un bordello e mezzo di eventi su ogni
singolo elemento della pagina, ma in ogni caso i focus viene spostato nella
maggior parte dei casi.
Su IE, e solo su IE,in modo *assolutamente* fuori standard, puoi impostare
gli elementi in modo che non siano iterabili dal tab. Ma se ci clicchi
sopra, gli dai cmq il focus, a meno che non sia disabled (come avevamo gia'
detto). E cmq questo significherebbe impostare *tutti* gli elementi
presenti nella pagina.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Come devo regolare la stampante laser per stordire?
(How do I set a laser printer to stun?)
Now playing: nothing

 presenti nella pagina.
Si lo so' che cliccare sull'oggetto X gli do il fuoco e mi va bene, ma se
do' un tab dopo avegli dato il focus con il mouse vorrei che saltasse ad un
oggetto con tabindex.
Lo so' e' una domanda al quando assurda (come la domanda di chi lo vuole
cmq...), in ogni caso non si puo' intercettare il tasto tab ed eseguire una
funzione (ad ogni colpo di tab) che controlla il valore del tabindex
dell'oggetto attuale onfocus, se maggiore dell'ultimo tabindex, quando viene
premuto il tab verra' indirizzato al tabindex = 1.
Tipo nell'esempio che ho dato, l'utente clicca su stampa e poi preme il TAB,
la funzione intercetta la chiamata al TAB, vede che il link ha un
tabindex>ultimo_tabindex (non essendo settato e' maggiore), la funzione
esegue l'onfocus sul primo oggetto con tabindex=1
Mi spiego?


 Si,ma temo di non spiegarmi io, a questo punto..
Si ti spieghi... Ma speravo ci potesse essere una soluzione... fa nulla mi
va benissimo cosi' e se il cliente ha da ridire... si accontenta!


 Si ti spieghi... Ma speravo ci potesse essere una soluzione... 
L'unica soluzione pratica, potrebbe essere quella esposta adesso. Solo su
IE, potrebbe esserci una sorta di workaround per evitare che, col tab, ci
si sposti su alcuni elementi.. ma dipende se tale applicativo web-based
gira *solo* su IE.
Inoltre, puo' darsi che con successive versioni / patch questo
comportamento venga eliminato.
-- 
ZER0://coder.gfxer.web-designer/
~ You don't have to be crazy to be a webmaster. But it helps.
on air ~ "medioeval"

 comportamento venga eliminato.
Infatti lo sto' facendo piu' standard possibile...
Ti ringrazio di tutto, per il resto cavoli loro, si accontentano cosi' :D
Ciao ;^)=


 Ti ringrazio di tutto, per il resto cavoli loro, si accontentano cosi' :D
Ok. :)
-- 
ZER0://coder.gfxer.web-designer/
~ La vita e' una tempesta, ma prenderla nel culo e' un lampo.
(B. Grillo)
bofh ~ "La prontezza dei disk-array IDE SATA." (polygen)