Newsgroup: it.comp.lang.javascript
Titolo: submit form che funziona su Safari e non su Firefox

Salve a tutti.
Ho una form di questo tipo:
<form name="miaform">
<input type="text" id="campo1" value="">
<input type="text" id="campo2" value="">
<input type="text" id="campo3" value="" onkeypress="miafunzione(); 
return false;">
<input type="submit" value="salva">
</form>
Quando l'utente sta digitando nella text "campo3" viene chiamata questa 
funzione js:
function miafunzione() {
	if (event.keyCode==13) {
	var testo=this.document.getElementById('campo3').value;
	[ codice... ]	
	this.document.getElementById('campo3').value='';
	}
}
Senza riportarvi la funzione per intero, alla pressione del tasto enter
viene effettuata una chiamata asincrona che memorizza in un database il 
testo inserito nella text "campo3", ma *non invia* la form: questo 
avviene solo quando l'utente clicca col mouse sul pulsante submit.
O almeno così dovrebbe essere: su Safari 5.0.2 funziona, su Firefox 
3.5.2 no: in questo caso viene effettuato direttamente il submit prima
di richiamare "miafunzione" (ho fatto delle verifiche inserendo degli 
alert).
Come si può ovviare al problema?
m.
-- 
"La legge, in Italia, è come l'onore delle puttane"
(Curzio Malaparte)

 alert).
Non è un comportamento normale, c'è qualcosa nel tuo codice che scatena 
il submit.
Ecco un semplicissimo esempio, provalo e vedrai che non è come dici:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>
  <head>
  <meta http-equiv="content-type" content="text/html;
charset=windows-1250">
  <meta name="generator" content="PSPad editor, 
www.pspad.com
">
  <title></title>
<script type="text/javascript">
	function miafunzione() {
		alert("eccola");
}
</script>
 </head>
  <body>
<div>
<form name="miaform" onsubmit="alert('submit');return false">
<input type="text" id="campo1" value=""> <input type="text" id="campo2" 
value=""> 
<input type="text" id="campo3" value="" onkeypress="miafunzione(); return 
false;">
<input type="submit" value="salva">
</form>
</div>
</body>
</html>

Cristiano Larghi ha scritto:

Non ho testato il tuo esempio ma ieri sera, dopo numerosi tentativi, ho 
risolto anche se in maniera poco elegante.
Ho riscritto l'elemento campo3 in questo modo:
<input type="text" id="campo3" onkeypress="if (event.keyCode==13) 
miafunzione(); else altrafunzione(); return false;">
Quando viene premuto enter viene richiamata miafunzione(); il problema
è che premendo qualsiasi altro tasto non succedeva niente, sicché l'user
non poteva compilare il campo. Allora ho aggiungo l'else che richiama
altrafunzione():
function altrafunzione() {
this.document.getElementById('campo3').value=xxx;
}
che contiene esplicitamente un errore di sintassi: in questo modo viene
bypassata e l'utente riesce a digitare. Soluzione estremamente brutta e 
poco elegante, ma la prima che mi è venuta in mente data l'urgenza del
momento. Proverò anche quella ce hai suggerito tu.
Grazie,


 Proverò anche quella ce hai suggerito tu. Grazie,
Purtroppo non ti ho suggerito nulla, ti ho solo indicato che quello che 
dici non è vero, perché una breve pagina contenente quello che dici non 
scatena il submit.

 
E' un workaround ignobile, lo so :), ma temporaneo... avevo l'urgenza di 
far funzionare la form e non mi raccapezzavo.
