Newsgroup: it.comp.lang.javascript
Titolo: forse[OT] disabilitare l'enter

ciao a tutti,
ho fatto un form abbastanza complesso e ci sono tre bottoni per
inviarlo... il problema che io non voglio che premendo enter faccia
partire il form poiche' andrebbe a schiacciare il primo bottone della
lista e questo non e' desiderato....
Come faccio a disabilitare il tasto enter?
grazie 1000
SHE
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Come faccio a disabilitare il tasto enter?
Il modo piů semplice che mi viene in mente č mettere nella form un
onsubmit='return false' e onclick dei bottoni mettere un
document.forms[0].submit() ; cosě dovrebbe funzionare se non ricordo male.
Ho qualche dubbio se questi bottoni di cui parli sono input di tipo submit.
Fai una prova e fai sapere se non funziona.
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.
--

 document.forms[0].submit() ;
cosi'?
onmouseclick:"this.document.form.submit();"
grazie mille


 cosi'?
onclick='document.forms[0].submit()'


cavolo,
l'idea era buona ma mi sminchia il get... non so perche' ma non mi passa
piu' i dati... tramite get...
che casotto..
Grazie lo stesso...


 piu' i dati... tramite get...
Impossibile...non è che hai più di una form? quel forms[0] che ti ho
indicato esegue il submit della prima form; se ne hai più di una dagli un
name e sostituisci lo zero con il nome della form tra virgolette.
Posta la parte incriminata
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.
--

 piu' i dati... tramite get...
Con quel metodo, i dati della form te li passa tutti.
Tranne, ovviamente, il pulsante di submit che hai premuto. Perche',
ovviamente, non e' piu' il pulsante a scatenare il submit, bensi'
Javascript.
Un altro approccio al problema potrebbe essere qualcosa del genere:
function disableEnterKey(e){
	var sender=e.srcElement||e.target;
 
 
	return ( !(sender.tagName=="INPUT" && sender.type=="text") ||
e.keyCode!=13 );
}
e nel tag form:
<form method="get" action="yourpage.htm" onkeypress="return
disableEnterKey(event)">
-- 
ZER0://coder.gfxer.web-designer/
~ Deformazione professionale č:
Quando in ascensore senti la ragazza accanto che tira fuori il cellulare,
e ti volti per capire se e' un modello sul quale puoi sviluppare in J2ME.

provato a mettere il nome del form ma non va... ;(
data_now=mkdata();
if($partes=="")
{
   //controlla in qle parte sta la data attuale
   if($data_now<="".$anno."-05-01")
   $partes=1;
   if(($data_now>"".$anno."-05-01") and ($data_now <"".$anno."-09-01"))
   $partes=2;
   if($data_now>="".$anno."-09-01")
   $partes=3;
}
//setta le date di inizio e di fine per parte 1
if($partes==1)
{
  $annoprev=$anno-1;
  $df1="".$anno."-04-30";                        //fine del calendario
  $df2="".$anno."-01-01";
  //inizio calendario
  if ($annoprev==2003)$df3=$anno."-01-01" ;
  else $df3="".$annoprev."-01-10";
  //inizio sql calendario
  $nxt="<input type=hidden name=nxt1 value=2>";
  $form_next="<INPUT type=submit name=nxt value='next >>'
onclick='document.forms['calend'].submit()'>";
}
//setta le date di inizio e di fine per parte 2
if($partes==2)
{
  $df1="".$anno."-08-31";  //fine del calendario
  $df2="".$anno."-05-01";  //inizio calendario
  $df3="".$anno."-02-01";  //inizio sql calendario
  $prc="<input type=hidden name=prc1 value=1>";
  $nxt="<input type=hidden name=nxt1 value=3>";
  $form_next="<INPUT type=submit name=nxt value='next >>'
onclick='document.forms['calend'].submit()'>";
  $form_prc="<input type=submit value='<< back' name=prc
onclick='document.forms['calend'].submit()'>";
}
//setta le date di inizio e di fine per parte 3
if($partes==3)
{
  //$anno_next=$anno+1;
  $df1="".$anno."-12-31";   //fine del calendario
  $df2="".$anno."-09-01";   //inizio calendario
  $df3="".$anno."-06-01";   //inizio sql calendario
  $prc="<input type=hidden name=prc1 value=2>";
  $form_prc="<input type=submit value='<< back' name=prc
onclick='document.forms['calend'].submit()'>";
}
  $lingua=$_COOKIE["lingua"];
  include"../../$lingua/schedule/x_calendari.php";
  //query sul periodo di 4 mesi
  $sql="select * from week where data_fin>='$df3' and data_fin<='$df1'";
  $sql_rs=mysql_query($sql,$conn_tribebase);
  //echo"$sql <br> df1 $df1 - df2 $df2 - df3 $df3";
$input="text";
$currency="CHF";
//form per nuovi prezzi
echo"<form onsubmit='return false' name='calend'
action=../../php/member/sched_obj.php?anno=$anno method=GET>
     <input type=hidden name=anno value='".$anno."'>
     <input type=hidden name=obj_id value='$obj_id'>
     <input type=hidden name=parte value='$partes'>
     $nxt $prc";
 
include "../schedule/genera_week_master.php";
//--------------------------------------------------------------
echo"
<table border=0 width=100%>
<tr>
  <td align=left width=33%>
   $form_prc
  </td>
  <td align=center width=34%><input type=submit value='$submit' name=upd
onclick='document.forms['calend'].submit()'>
  </td>
  <td align=right width=33%>
   $form_next
  </td>
</tr>
</table>
</form>";
e' un po' un casotto ma serve per darti l'idea di come sono
ingarbuglio.....
thnx 


 provato a mettere il nome del form ma non va... ;(
Questo funziona; lo ho buttato lě un po' alla svelta ma dovrebbe esser
compatibile con i browser moderni. Prova a partire da qua (oppure vedi
esempio di zer0):
http://www.criosoftware.it/StopReturn.htm


zero la funzione che mi hai dato va meno di zero..... hehehe
grazie lo stesso..


zero la funzione che mi hai passato va meno di zero.. :)
grazie lo stesso


 zero la funzione che mi hai dato va meno di zero..... 
La funzione che ti ho dato va alla perfezione.
Se non ti va, i casi sono tre: o dipende dal browser sul quale l'hai
provata; o l'hai mal implementata; oppure il codice della tua pagina ha
qualcosa che compromette il funzionamento del codice che ti ho postato.
Prova a copiare questo codice in una pagina vuota, e visualizzarla:
<html>
<head>
	<title>Untitled</title>
</head>
<body>
<script type="text/javascript">
function disableEnterKey(e){
	var sender=e.srcElement||e.target;
 
	return ( !(sender.tagName=="INPUT" && sender.type=="text") ||
e.keyCode!=13 );
}
</script>
<form method="get" onkeypress="return disableEnterKey(event)">
	<input type="text" value="bye" name="a" />
	<input type="text" value="bye" name="b" />
	<textarea name="txt"></textarea>
	<input type="submit" value="first" name="first" />
	<input type="submit" value="second" name="second" />
	<input type="submit" value="third" name="third" />
</form>
</body>
</html>
Se non ti dovesse funzionare, probabilmente dipende dal browser. 
La prossima volta prima di dire che qualcosa non funziona e basta,
specifica dettagliatamente il contesto: "non funziona" non vuol dire nulla.
Che errore ti da'? Hai visto la JS Console di FF/MZ/NS che ti dice? Su che
browser l'hai testata? Hai provato a farla girare "stand alone" (ovvero
cosi' come ti ho scritto in quest'esempio)?
Se vuoi che ti si dia un'aiuto, devi darci le informazioni necessarie. Come
alcuni amano dire in questo NG, non sempre la nostra "sfera di cristallo"
funziona.
-- 
ZER0://coder.gfxer.web-designer/
~ ..ma in effetti il concetto di WYSYWYG (quello che vedi e' quello che
ottieni) si applica ai computer malissimo, cosi' come si applica alle
donne... (The Real Programmer)

chiaramente lo stand alone funziona... il problema e' che non mi da
nessun errore... solo che se premo enter schiaccia il primo bottone del
form... :( adesso riprovo se non va ti posto tutta la pagina....
Grazie mille 


purtroppo non va ancora.... 
<head>
 <title>
  $titolo
 </title>
</head>
<body>
<script type=\"text/javascript\">
function disableEnterKey(e){
	var sender=e.srcElement||e.target;
 
	return ( !(sender.tagName==\"INPUT\" && sender.type==\"text\") ||
e.keyCode!=13 );
}
</script>
";
$txt_main_title="Configure Schedule";
$txt_sub_title="Setup of the ".$obj_name."'s schedule";
include "../../intestazione.php";
if($alert==-1)
{
echo"
<script>
window.alert(\"$upd_done\")
</script>";
}
//--------------------------------------------------------------
$data_now=mkdata();
if($partes=="")
{
   //controlla in qle parte sta la data attuale
   if($data_now<="".$anno."-05-01")
   $partes=1;
   if(($data_now>"".$anno."-05-01") and ($data_now <"".$anno."-09-01"))
   $partes=2;
   if($data_now>="".$anno."-09-01")
   $partes=3;
}
//setta le date di inizio e di fine per parte 1
if($partes==1)
{
  $annoprev=$anno-1;
  $df1="".$anno."-04-30";                        //fine del calendario
  $df2="".$anno."-01-01";
  //inizio calendario
  if ($annoprev==2003)$df3=$anno."-01-01" ;
  else $df3="".$annoprev."-01-10";
  //inizio sql calendario
  $nxt="<input type=hidden name=nxt1 value=2>";
  $form_next="<INPUT type=submit name=nxt value='next >>'>";
}
//setta le date di inizio e di fine per parte 2
if($partes==2)
{
  $df1="".$anno."-08-31";  //fine del calendario
  $df2="".$anno."-05-01";  //inizio calendario
  $df3="".$anno."-02-01";  //inizio sql calendario
  $prc="<input type=hidden name=prc1 value=1>";
  $nxt="<input type=hidden name=nxt1 value=3>";
  $form_next="<INPUT type=submit name=nxt value='next >>'>";
  $form_prc="<input type=submit name=prc value='<< back'>";
}
//setta le date di inizio e di fine per parte 3
if($partes==3)
{
  //$anno_next=$anno+1;
  $df1="".$anno."-12-31";   //fine del calendario
  $df2="".$anno."-09-01";   //inizio calendario
  $df3="".$anno."-06-01";   //inizio sql calendario
  $prc="<input type=hidden name=prc1 value=2>";
  $form_prc="<input type=submit name=prc value='<< back'>";
}
  $lingua=$_COOKIE["lingua"];
  include"../../$lingua/schedule/x_calendari.php";
  //query sul periodo di 4 mesi
  $sql="select * from week where data_fin>='$df3' and data_fin<='$df1'";
  $sql_rs=mysql_query($sql,$conn_tribebase);
  //echo"$sql <br> df1 $df1 - df2 $df2 - df3 $df3";
$input="text";
$currency="CHF";
//form per nuovi prezzi
echo"<form action=../../php/member/sched_obj.php?anno=$anno method=GET
onkeypress=\"return disableEnterKey(event)\">
     <input type=hidden name=anno value='".$anno."'>
     <input type=hidden name=obj_id value='$obj_id'>
     <input type=hidden name=parte value='$partes'>
     $nxt $prc";
 
include "../schedule/genera_week_master.php";
//--------------------------------------------------------------
echo"
<table border=0 width=100%>
<tr>
  <td align=left width=33%>
   $form_prc
  </td>
  <td align=center width=34%><input type=submit value='$submit'
name=upd>
  </td>
  <td align=right width=33%>
   $form_next
  </td>
</tr>
</table>
</form>
ti ringrazio tanto..


 ti ringrazio tanto..
Non postare il sorgente PHP; mandaci il sorgente client, non quello server.
Ovvero, fai un "view source" delle pagina caricata sul browser dal
web-server, salva il testo e invia quello.
Anzi, e' probabile che facendo questa operazione ti accorga da solo se c'e'
un errore di sintassi o altro, che sul sorgente PHP non riesci a vedere.
-- 
ZER0://coder.gfxer.web-designer/
~ La vita e' una tempesta, ma prenderla nel culo e' un lampo.
(B. Grillo)

<script language="javascript">
<!--
function zoom(img,name,width,height) {width +=0; height +=0;
zoomWin=window.open
(img,name,'width='+width+',height='+height+',toolbar=no,resizable=no,scrollbars=yes');window.zoomWin.focus();
}
// -->
</script>
<link rel=stylesheet href="../../css/style.css" type="text/css">
<html>
<head>
 <title>
  Schedule's compressore v102
 </title>
</head>
<body>
<script type="text/javascript">
function disableEnterKey(e){
	var sender=e.srcElement||e.target;
 
	return ( !(sender.tagName=="INPUT" && sender.type=="text") ||
e.keyCode!=13 );
}
</script>
<br>
<link href="
http://192.168.1.5/tribook/css/style.css
" type=text/css
rel=stylesheet>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
 <tr>
  <td width=20 style="background-image:
url('
http://192.168.1.5/tribook/navbar/verde/bordo.jpg'
);
background-repeat: repeat-x; background-position-y: top">
   &nbsp;
  </td>
  <td width="300" colspan=2>
   <div id='top'>
    <table border="0" cellpadding="0" cellspacing="0" width="300">
     <tr>
 
      <td width='44' style="background-image:
url('
http://192.168.1.5/tribook/navbar/verde/begin_sel.jpg'
);
background-repeat: no-repeat; background-position: right top">
       &nbsp;
      </td>
      <td width='212' height='30' valign='center' align='left'>
       <a class=sel><b>&nbsp;&nbsp;&nbsp;Configure Schedule</b></a>
      </td>
 
      <td width='44' height='30' valign='center' align='center'
style="background-image:
url('
http://192.168.1.5/tribook/navbar/verde/end.jpg'
);
background-repeat: no-repeat; background-position: left top">
       &nbsp;
      </td>
     </tr>
    </table>
   </div>
  </td>	
  <td style="background-image:
url('
http://192.168.1.5/tribook/navbar/verde/bordo.jpg'
);
background-repeat: repeat-x; background-position-y: top">
   &nbsp;
  </td>
 </tr>
 <tr>
  <td bgcolor=#5BB804 width=20 height=20>
    &nbsp;
  </td>
  <td bgcolor=#5BB804 width=52 height=20>
    &nbsp;
  </td>
  <td bgcolor=#5BB804 width=248 align=left valign=middle height=20>
    <div id='sub_top'> Setup of the compressore v102's schedule </div>
</td>
  <td bgcolor=#5BB804 height=20>
    &nbsp;
  </td>
 </tr>
</table>
<br>
<form action=../../php/member/sched_obj.php?anno=2004 method=GET
onkeypress="return disableEnterKey(event)">
     <input type=hidden name=anno value='2004'>
     <input type=hidden name=obj_id value='33'>
     <input type=hidden name=parte value='2'>
     <input type=hidden name=nxt1 value=3> <input type=hidden name=prc1
value=1>
  <table border=0  cellpadding=0  cellspacing=0  width=100%
style=border-collapse: collapse bordercolor=#111111>
    <tr><td align=right colspan=4><a
href=sched_obj.php?obj_id=33&parte=2&anno=2004></a> &nbsp; <b>Year
2004</b> &nbsp; <a href=sched_obj.php?obj_id=33&parte=2&anno=2005> -->
</a></td></tr>
    <tr>
     <td width= 8% valign=top></td>
    [cut di un casino di tabelle]
      </tr>
     <tr>
     <td onmouseover="this.style.backgroundColor='yellow';"
  onmouseout="this.style.backgroundColor='#F0F0F0';">
     <table border=0 width=100% cellpadding=0 cellspacing=0>
      <a
href=javascript:zoom('../../php/book.php?obj=33&per=34_2004&di=2004-08-21&df=2004-08-28&c=130&cu=CHF&mast=1&parte=2&anno=2004','schedule_sheet',350,450,'yes')>
       <tr>
        <td width= 50% height=30 bgcolor=#FFFFD2 valign=middle
style='cursor:pointer;cursor:hand'><font color=#267004> &nbsp; 21.08 -
28.08 </td>
        <td width= 50% height=30 bgcolor=#FFFFD2 valign=middle
align=right style='cursor:pointer;cursor:hand'><font color=#267004>
<input type=text size=6  style="text-align: right; margin-right:4;
padding-right: 5; height:23px;" name=34_2004 value='130'> CHF&nbsp;
</font>
        </td>
       </tr>
      </a>
     </table></td>
      </tr>
      </table>
      </td>
  </tr>
 </table>
<table border=0 width=100%>
<tr>
  <td align=left width=33%>
   <input type=submit name=prc value='<< back'>
  </td>
  <td align=center width=34%><input type=submit value='Update Prices'
name=upd>
  </td>
  <td align=right width=33%>
   <INPUT type=submit name=nxt value='next >>'>
  </td>
</tr>
</table>
</form>
ti ringrazio tanto


 ti ringrazio tanto
Guarda, io ho preso il tuo codice che hai postato qui, copiato e incollato
su una pagina vuota, fatto girare su Firefox, e la funzione
"disableEnterKey" va.
Ovvero: mi piazzo sul campo di testo dove e' scritto "130", e premo invio.
Il submit non viene eseguito.
Levo la funzione "disableEnterKey" dall'event handler "onkeypress",
ricarico la pagina, mi riposiziono sul campo di testo di prima e premo
invio.
Il submit viene eseguito.
Quindi direi che si comporta come deve comportarsi.
L'hai testato prima di inviarlo? Perche' magari funziona anche a te, ed il
problema e' dato dal "casino di tabelle" che hai cuttato.
P.S.
Se hai un solo campo di testo, e vuoi impedire che il submit della form
venga fatto premendo il tasto invio su quel campo; puoi usare un approccio
piu' localizzato:
<input type="text" value="" onkeypress="return (event.keyCode!=13)" />
eliminando l'onkeypress dalla form.
-- 
ZER0://coder.gfxer.web-designer/
~ Il computer e' una macchina progettata per velocizzare e automatizzare
gli errori.

 eliminando l'onkeypress dalla form.
Sei sicuro funzioni con browser !=IE ? Secondo me no
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.
--

 Sei sicuro funzioni con browser !=IE ? Secondo me no
Beh, che ti ci vuole a provarlo, miscredente che non sei altro? :P
Funziona sui browser "moderni" come dici tu (IE, FF/MZ/NS, e anche su Opera
dovrebbe andare).
-- 
ZER0://coder.gfxer.web-designer/
~ "Problemi" e' il nome che gli informatici danno a quelli che
comunemente verrebbero definiti "disastri"; altrimenti si chiamano
"features".

 dovrebbe andare).
In realtà te l'ho chiesto perché lo ho provato ieri e mi restituiva sempre
0 come keycode, vedi 
http://www.criosoftware.it/StopReturn.htm


 0 come keycode, vedi 
http://www.criosoftware.it/StopReturn.htm
Non nel caso del tasto enter; provare per credere.
-- 
ZER0://coder.gfxer.web-designer/
~ L'ingegnere non vive, funziona.

 Non nel caso del tasto enter; provare per credere.
Cioč cioč restituisce zero perché ho provato con tasti alfabetici, e invece
funziona con l'enter????
Strano comportamento, verifico
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.
--

 Strano comportamento, verifico
Eggià: 
http://www.criosoftware.it/keyCodeFirefox.htm
Quindi il keyCode viene interpretato da IE come il tasto premuto, mentre
gli altri lo interpretano come tasto "speciale" (ho visto che funziona
anche con tab o esc, per esempio).
Non è che mi piaccia molto questa cosa, però


 Strano comportamento, verifico
Non e' affatto strano, per i caratteri normali (alfanumerici) c'e' il
charCode.
Quest'ultimo assume 0 nel caso in cui il tasto premuto sia un "key"
(enter,tab, canc..); viceversa e' il keyCode ad assumere 0 nel caso il
tasto premuto non sia un "key".
Il "which" suppongo sia stato mantenuto per retrocompatibilita' (NS4.x).


 tasto premuto non sia un "key".
Ritorno alle origini, vedo (ricordo il "doppiotasto" in Pascal per
verificare se era stato premuto un tasto funzione, per esempio, come si
chiamavano? Ascii e keycode? Se la lettura del tasto era 0 allora rileggevi
per vedere che tasto "speciale" era...sono un po' arrugginito ma qualcosa
ricordo ancora, solo che secondo me non si chiamava keycode ma...??)


 Non è che mi piaccia molto questa cosa, però
E come mai? E' corretto in questo modo, invece. Alcuni caratteri come i
tasti cursore, ad esempio, li puoi trappare facilmente in questo modo,
essendo tasti "speciali" come dici tu.
Del resto, essi figurano come una coppia di caratteri (0+39, per dirne una)
nel buffer di tastiera. Non sono composti da un unico codice.
Quando si gestisce a basso livello l'input di tastiera, per verificare se
l'utente ha premuto alcuni tasti speciali (es i tasti cursore), si recupera
dal buffer il primo carattere, si verifica se e' uguale a 0, ed in tal caso
si recupera anche il secondo, e sappiamo che il secondo e' da interpretare
come un carattere speciale (il codice 38 infatti normalmente sarebbe "&",
mentre nel caso sia preceduto dal codice 0 e' da considerarsi come il tasto
UP).
L'ho un po' spiegata a pene di segugio, stamani sono un po' rintro, ma
spero tu c'abbia capito qualcosa ugualmente :)


 ricordo ancora, solo che secondo me non si chiamava keycode ma...??)
Avessi letto prima questo post, avrei evitato di scriverti la pappardella
di poc'anzi.
Cmq non lo so, io anche pascal accedevo direttamente al buffer della
tastiera.. quindi non ricordo se c'erano funzioni preposte allo scopo.
-- 
ZER0://coder.gfxer.web-designer/
~ I feel like I'm diagonally parked in a parallel universe.

 spero tu c'abbia capito qualcosa ugualmente :)
Sì, è quello che cercavo anch'io di dire nell'altro mio messaggio sul
Pascal.


 Di secondo nome faccio Tommaso...
Ho capito, ma ti pare che io consiglio qualcosa sul NG che funzioni solo su
IE (senza specificarlo), quando il mio browser di default e' FF? E' piu'
facile il contrario, no? :)
-- 
ZER0://coder.gfxer.web-designer/
~ Se potete leggere questo, la mia donna e' caduta.
(Letta sul retro di una maglietta di un motociclista)

 facile il contrario, no? :)
Essė, sembrava strano in effetti, ma dato che avevo provato proprio
ieri...chiedo scusa maestro, ora che ho visto la mia fede non barcollerā
pių! ;)


 pių! ;)
ROTFL.. "Non ti preoccupare, io ti perdono. Va', e non peccare piu'." :D
-- 
ZER0://coder.gfxer.web-designer/
~ Tutti quelli che credono nella psicocinesi, per favore alzino la mia
mano.