Newsgroup: it.comp.lang.javascript
Titolo: Ancora problemi con tasto invio!

Ringrazio tutti per i suggerimenti datomi, ma il problema non è ancora
risolto.... forse è piu' complesso del previsto, o forse sono io
particolarmente stupido.
Il problema è sempre quello di qualche messaggio fa: creando una pagina con
una form, un solo input text ed un bottone submit, premendo invio viene
passato alla form solo il parametro del text e non il nome del bottone
submit.
Ho risolto cosi': intercetto la pressione del tasto invio (#13) e lancio una
funzione che trova il bottone di submit e ci applica il focus. Lo script
funziona, ma solo sotto IE... cosa modificare per farlo funzionare anche
sotto Netscape?
<html>
<head><title></title></head>
<SCRIPT LANGUAGE="JavaScript">
function FocusSubmit() {
 if (document.forms.length>0)
 {
  obj=document.forms[0].elements;
  for (i=0;i<obj.length;i++){
       if ((obj[i].type=='submit')&&(obj.length==2)) obj[i].focus();
  }
 }
}
</script>
<SCRIPT LANGUAGE="JavaScript">
var abilitato=0;
var ns4=0;
function KeysCheck(){
  if (document.forms.length>0)
 {
          obj=document.forms[0].elements;
   for (i=0;i<obj.length;i++){
        if ((obj[i].type=='text')&&(obj.length==2)) obj[0].focus();
   }
 }
 browserName=navigator.appName.charAt(0);
 browserVer=parseInt(navigator.appVersion);
 if (browserName=="M" && browserVer >= 3) abilitato=1;
 if (browserName=="N" && browserVer >= 3) abilitato=2;
 if (browserName=="N" && browserVer >= 4) abilitato=3;
 if (browserName=="M" && browserVer >= 4) abilitato=4;
 }
function keyDown(e) {
         if (abilitato==3) {
  var ns4=1;
  var nKey=e.which; var ieKey=0;
  if (nKey==13) FocusSubmit();
  }
         if (abilitato==4) {
  var ns4=0;
  var ieKey=event.keyCode; var nKey=0;
  if (ieKey==13) FocusSubmit();
               }
 }
document.onkeydown = keyDown
if (ns4) document.captureEvents(Event.KEYDOWN)
</script>
<body background=/images/sfondoCopia.gif onload=KeysCheck()>
<form name=f action=
http://zzzzzzz
 method=get> -->
<input type=text name=campo1 value=campo1><br>
<input type=submit name=bottone value=bottone>
</form>
</body></html>

 sotto Netscape?
[]
Il seguente script blocca l'invio con NS4.x e IE5.0 intercettando la
pressione del tasto *invio*
------------------------
function blocca(evt){
 var tasto =(document.all)? event.keyCode:evt.which;
 if (tasto=='13') return false
}
-----------------
la chiamata dal campo input aggiungendo *onKeypress="return
blocca(event)"* ;
sfortunatamente NS6 non blocca l'invio del modulo.
Lo conosco troppo poco e probabilmente sbaglio qualcosa, ma sembra che
NS6 anteponga l'invio a qualsiasi comando aggiuntivo, qualsiasi sia
l'evento catturato.
Un cambio di strategia porta a una possibile soluzione; invece che
cercare di catturare l'evento si puo' condizionare l'invio ad una
variabile che viene modificata solamente alla pressione del tasto
submit:
-----------------
<SCRIPT LANGUAGE=javascript>
<!--
bb=true;
// -->
</SCRIPT>
...............
<form name=f action=prova001.htm method=get onSubmit="if (bb)return
false">
<input type=text name=campo1 value="" ><br>
<input type=submit name=bottone value=bottone onClick="bb=false">
</form>
----------------
In questo modo alla pressione del tasto *invio* l'invio del modulo viene
bloccato dall'evento onSubmit.
Questo dovrebbe funzionare con IE5.0 NS4.x e NS6
Saluti, Paolo

 submit:
Grazie per il suggerimento, ma purtroppo non posso aggirare così il
problema... il cliente pretende che possa fare submit sia cliccando col
mouse che premendo il tasto invio, e cio' deve funzionare sia con explorer
che netscape. La servlet che c'è dietro funziona in base al nome del bottone
submit: il problema è che premendo invio, nome/valore del bottone submit non
vengo passati (il problema si ha solo nel caso di una form con 1 campo testo
ed 1 bottone submit: se ci fossero 2 campi testo, anche premendo invio viene
passato il valore del tasto submit... misetri del'html). Altri suggerimenti?

 ha scritto nel messaggio
news:GJt06.155333$hk4.5...@news.infostrada.it...

Credo che la servlet che c'e' dietro funzioni in base a un nome di
variabile, che questa abbia origine da un bottone o da altro dubito che
possa mai saperlo la servlet.
Se aggiungi un input nascosto con nome bottone e valore bottone e togli
il nome dal bottone mi pare che i dati inviati siano senmpre identici e
corretti.
Comunque, la soluzione per IE5 e NS4.x e' indicata nel post precedente;
il codice serve a bloccare l'azione "anomala" (non credo piu' sia un
anomalia ma una scelta visto che tutti si comportano allo stesso modo)
del tasto invio ma puo' facilmente essere implementata con un ..click()
------------------------------------
function blocca(evt){
 var tasto =(document.all)? event.keyCode:evt.which;
 if (tasto=='13'){
 document.forms.f.bottone.click();
 } return false
}
----------
Per avere un codice funzionante anche con NS6, non ho trovato altre
soluzioni oltre all'introduzione della variabile e un temporizzatore a 0
millisecondi; il codice seguente dovrebbe funzionare (spero che ci siano
soluzioni migliori):
---------------
<SCRIPT LANGUAGE=javascript>
<!--
bb=true;
function blocca(evt){
 var tasto =(document.all)? event.keyCode:evt.which;
 if (tasto=='13' ||tasto=='0'){
 setTimeout('document.forms.f.bottone.click()',0);
  return false
 }
}
// -->
</SCRIPT>
</HEAD>
<BODY>
<form name=f action=prova001.htm method=get onSubmit="if (bb) return
false">
<input type=text name=campo1 value=campo1 onKeyPress="return
blocca(event)"><br>
<input type=submit name=bottone value=bottone onClick="bb=false">
</form>
----------------
Saluti, Paolo