Newsgroup: it.comp.lang.javascript
Titolo: Premo invio ma il comportamento è come un TAB: possibile?

E' possibile fare in  modo che durante la compilazione di un form, la
pressione
del tasto INVIO non implichi il submit del form stesso, ma passi all'input
successivo come se avessi premuto TAB: posssibile?
Ringrazio anticipatamente tutti coloro mi saranno d'aiuto,
Micky

Ti richiede l'intercettazione degli eventi, che è diversa almeno in IE, NS4 e
NS6.
In altre parole ti richiede un bel pacchetto di codice incluso la noiosa
procedura di cattura di NS4.
Si puo' immaginare:
una funzione che interecetta il rpimo focus su un element della form
tale funzione avvia la cattura (fin allora rinviata con un return false)
da quel momento in poi si intercetta ogni pressione di Enter
si tiene una array con riferimenti agli oggetti della form
ogni click su una form, aggiorna un indice preciso di quella array
da questo si desume a che punto della form e' stato cliccato il primo elemento
da un altro oggetto che collega indici della array a riferimenti agli oggetti
form...
... si stabilisce la path che deve essere seguita
si fornisce un pulsante per disabilitare la prosecuzione di tale cattura (già,
perchè se un utente vuole andare a capo in una textarea e tu gli leghi il tasto
enter allo switching
del focus, non va piu a capo)...
Insomma, se hai necessità commerciali o critiche, ti può consolare sapere che
sì, penso si possa ben fare. ma se era solo
una curiosità o non è essenziale ti sconsiglio di implementare una cosa che ti
costringerebbe a caricare codici assai complessi.
Il fatto è che spesso l'utnete clica un pulsante e tutto accade subito: dietro
c'è stato
un programmatore che ha passato notti insonni affinchè tutto *apparisse* così
facile!
ciao in gamba
TrueLies
http://www.unitedscripters.com/
-- 
Posted from  [212.141.82.244] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ho trovato un vecchio post di ZERO qui:
http://groups.google.com/groups?hl=en&threadm=8FD799481paolozavariseliberoi%
40192.106.1.6&rnum=3&prev=/groups%3Fq%3Dtab%2Binvio%26hl%3Den%26meta%3Dgroup
%253Dit.comp.lang.javascript
ma purtroppo non riesco a farlo funzionare, per caso hai tempo di darci
un'occhiata?
Indipendententemente, grazie 1000 per la risposta,
saluti, micky


 saluti, micky
Mi sa che quel risultato lo ottieni mettendo con un "onSubmit" un controllo
sui dati inseriti:
se non sono giusti lo processi, altrimenti metti il focus sul primo campo
che dà il problema.
Se il controllo vede solo se i campi sono stati riempiti spingendo invio
passerai da una casella all'altra.
LAMASE


-- 
Posted from  [212.141.82.105] 


scusa ci sono due refusi che usavo per i debug, te lo reinvio senza di quelli.
Voglio anche aggiungere una specificazione:
la array esterna consente di catturare più tipi, e di segnare una path, ma
ovviamente avevo tentato
di individyuare il type=hidden usando
obj.type=="hidden"
Indovina un po': Netscape che riconosceva obj, non ne leggeva però la
porprietà, mentre IE sì.
Cioè si è sfiorata la ipotesi di un Nestcape che non leggesse obj.
Non vorrei sembrare querulo, ma il motivo per cui io di solito suggerisco le
strade un po' più lunghe
non è che non conosco quelle brevi: è che ho visto troppi browsers perdersi su
quelle corte.
Purtroppo, questo fa una fomra mentis non sempre ottimale per ogni problema, ma
tanto tanto reale!!
ciao
var coordina=new Array();
function coordinaBene(form){
for(var i=0;i<form.elements.length;i++){
if(form.elements[i].type=="hidden"||/*taglia fuori il problema hidden*/
form.elements[i].type=="radio"||
/*il dannato netscape al secondo keydown dopo focus su check, la spunta e non
prosegue mai piu...*/
form.elements[i].type=="checkbox"){continue}
coordina[(++coordina.length)-1]=i;
 /*colleziona solo quelli non problematici*/
}
/*   invoca con: <body onLoad="coordinaBene(document.nomeForm)">   */
}
  function nextElement(e,obj){
      var keyAscii=0
      if (typeof(e.which)!="undefined")
       keyAscii=e.which;
      else if (typeof(event.keyCode)!="undefined")
    keyAscii=event.keyCode;
   if (keyAscii==13){
    for (var i=0;i<coordina.length;i++){ /*loop su coordina: hidden tagliati
fuori//*/
     if (obj.form.elements[coordina[i]]==obj){
     obj.form.elements[coordina[
	 ((i+1)>(coordina.length-1))?
	 0:
	 (i+1)
	 ]].focus()
	 break;}
	  }
	  }
  }
TrueLies
http://www.unitedscripters.com/


 successivo come se avessi premuto TAB: posssibile?
Secondo me invece di catturare gli eventi eccetera eccetera ti conviene
usare SOLO
onSubmit() e focus()... mi sembra più semplice e più "compatibile"
LAMASE

Sì ci sono tante alternative, io gli ho riadattato lo script che segnalava.
Vorrei aggiungere che purtorppo le cose si complicano ulteriormente: lo sript
esegue
quel che deve eseguire, saltando ora gli hidden (che NS non avrebbe
riconosciuto come obj.type) e purtoroppo
saltando radi e checkbox (sempre NS4 una volta dato il focus a un elemento
radio o checkbox, a qualsiasi
pressione successiva di enter lo spunta, non c'è verso di convincerlo a fare
altrimenti): ma bisogna
prendere in considerazione le textarea: se un utente va a capo in una textarea,
enter
sposta iul focus altrove: occorre quindi aggiungere codice per disabilitare
questa eventualità:
1) o l'utente sputna una casella e se è checked diamo un return false
2) disabilitiamo lo switch del focus su tutte le textarea
Ora, può darsi che tutto questo non serva, ma mi pare opportuno segnalare il
possibile
problema nel caso che la persona che ha chiesto questo aiuto implementi lo
script e abbia
motivo di scongiurare una eventualità del genere.
Comunque per ora buon natale, domani vado in ferie
ciao
TrueLies
http://www.unitedscripters.com/
"LAMASE" <a@b.c> wrote in message news:9vpiub$5uf$1...@fe1.cs.interbusiness.it...

-- 
Posted from  [212.141.82.84] 


 TrueLies
Anche io!!! Auguri!!
LAMASE