Newsgroup: it.comp.lang.javascript
Titolo: Invio e navigazione nei form HTML

Salve,
scusate, ma proprio non ho trovato la risposta alla mia domanda su google:
è possibile far sì che, alla pressione del tasto INVIO in un form
corrisponda la simulazione del tasto TAB? Io dovrei fare in modo che il
tasto INVIO provochi l'acquisizione del focus da parte del prossimo
elemento del form, e questo è il modo più veloce che mi è venuto in
mente.
In alternativa, avevo pensato a specificare per ogni elemento un gestore
per l'evento onKeyUp di questo tipo:
function keyHandler(next) {
    forms[next].focus();
}
ma la sintassi di quest'istruzione non deve essere corretta.. come posso
fare?
Grazie in anticipo!!
-- 
[ Andrea Spadaccini - a.k.a. Lupino/Lupin85 - Catania - ICQ#: 91528290 ]
[ GPG ID: 5D41ABF0 - key @ 
pgp.mit.edu
 - Slackware 10.1 w/Linux 2.4.22 ]
[ Linux User # 313388 - MAIL: a.spadaccini(at)catania(dot)linux(dot)it ]

 }
smanettando un po', sono riuscito a far sì che questo codice faccia ciò
che mi serve:
function keyHandler(event, next) {
    if(event.keyCode == 13) {
        next.focus();
        return false;
    }
}
ma ho un altro problema: il focus passa sì all'altro elemento, ma
purtroppo viene automaticamente sollevato l'evento "submit" (spero di
essermi spiegato)... Come modifico questo comportamento?
Grazie in anticipo.


 essermi spiegato)... Come modifico questo comportamento?
Dipende da come stai chiamando questa function...
In generale devi prima di tutto stoppare la propagazione, un qualcosa del
tipo
function StopBubbling(e) {
	if(!e) e=window.event;
	if(typeof(e.stopPropagation)=="function") e.stopPropagation();
	else e.cancelBubble=true;
	if(typeof(e.preventDefault)=="function") 
	 e.preventDefault();
	else returnValue=false;
	return;
}
Da chiamarsi nella tua function (e=il parametro che hai chiamato event).
Cambia il nome del parametro "event", altrimenti rischi casini perché é un
oggetto riservato.
Poi servirà immagino rimuovere il tasto premuto, del tipo
if(Event) Event.keyCode=0;
Se non già fatto quando la chiami restituisci un false (return
keyHandler(event,next) e nella function al termine return false).
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 keyHandler(event,next) e nella function al termine return false).
Ho utilizzato i tuoi suggerimenti, ma fa ancora il submit del form!!
Ecco la funzione aggiornata:
function keyHandler(e, next) {
    if(!e) e=window.event;
    if(e.keyCode == 13) {
        returnValue = true;
	    if(typeof(e.stopPropagation)=="function") 
            e.stopPropagation();
        else
        	e.cancelBubble=true;
    	if(typeof(e.preventDefault)=="function")
            e.preventDefault();
    	else 
            returnValue=false;
        next.focus();
        e.keyCode = 0;
        return returnValue;
    }
}
Ho un'altra domanda, più importante: dove trovo la documentazione
relativa agli eventi, all'oggetto document ecc.. Nel reference ufficiale
"Core Javascript Reference" non ho trovato granché..
Grazie ancora!


On Mon, 08 Aug 2005 17:29:23 +0000, Lupino wrote:
Ho sistemato la faccenda con un po' di magia nera. :)
Ho impostato la proprietà onsubmit del form a "return false;", poi ho
impostato la onclick del pulsante submit a 
"var s = 
this.name
; 
 if(
event.target.name
 == s)
     event.target.form.submit();"
ed inoltre ho abilitato il tasto di scelta rapida F2 per effettuare il
submit automatico. Funge tutto. :)
