Newsgroup: it.comp.lang.javascript
Titolo: invio form da script

Non riesco ad inviare i dati di un form ad uno script di elaborazione.
In pratica ho costruito il form perň il pulsante che ho usato non č di
quelli standard (input type="submit") bensě una mia immagine sulla quale ho
applicato l'evento onClick.
Di seguito il codice:
<form method="post" action="mail.php">
<img src="..." onClick="invia()">
...
</form>
e lo script nell'head č cosě:
function invia() {
document.forms[0].submit()
}
Pare che il form invii qualcosa, non ho ancora avuto modo di testare se
effettivamente invia i dati allo script mail.php, ma il problema č che non 
si sposta sulla pagina mail.php ma rimane la stessa. Perchč?
Mi spiegate il funzionamento? Mi sa che mi sfuggono un po' di cose...
ciao, grazie
Vaist

 ha scritto
Ho modificato il codice, ho provato ad inserire anche l'action nella 
funzione ma ancora niente.
La funzione č:
function invia() {
   document.forms[0].action = "mail.php";
   document.forms[0].submit();
}
Why??? 

 }
Beh...l'ho appena provata in un file di test e mi funziona, quindi non è 
colpa dello script. Allora deve essere un problema di html perché la mia 
pagina è composta da numerosi div al cui interno ci sono tabelle ecc... In 
pratica ci sono dei campi di testo e delle textarea distribuite in div 
differenti. Allora ho provato a mettere il tag <form> subito dopo il tag 
<body> e il tag di chiusura </form> subito prima del tag di chiusura 
</body>. Ma non funge. Ho provato a spostare il tag di apertura e chiusura 
form in diversi punti del listato ma niente da fare. Come risolvo?
ciao Vaist 

 ha scritto nel messaggio 
news:47fedd61$0$18150$4faf...@reader3.news.tin.it...


 form in diversi punti del listato ma niente da fare. Come risolvo?
Innanzitutto, facendo girare lo script su un browser che ti possa
fornire un minimo di supporto nel debugging, come firefox. E vedi
se l'error console ti dice qualcosa.
Se non ti dice nulla, è presumibile che la funzione neanche venga
invocata. Qualche buon vecchio alert potrebbe aiutarti:
function invia(){
	alert("sono entrato in 'invia'");
	document.forms[0].action = "mail.php";
	document.forms[0].submit();
}
Ovviamente andrebbe visto se la form è effettivamente quella; qui
potresti stamparti un qualcosa che possa indicartelo. Ad esempio,
imposta un id alla form e richiedi il valore di un elemento noto,
tipo un campo di testo (qui, per esempio, con name "txtCampo"):
function invia(){
	alert("sono entrato in 'invia'");
	alert("il document ha "+document.forms.length+" form");
	var frm = document.forms[0];
	alert("form: "+
frm.id
);
 
	if ( frm.txtCampo )
		alert("txtCampo presente. Valore: " + frm.txtCampo.value);
	frm.action = "mail.php";
	frm.submit();
}
Ovviamente andrebbe visto se la form è effettivamente quella; qui
Ci sono ovviamente test più approfonditi che puoi fare ma intanto
questi già dovrebbero darti qualche risposta, soprattutto assieme
all'error console di firefox.
-- 
~ "La storia sarà buona con me perché sarò io a scriverla."
(Winston Churchill)

 all'error console di firefox.
Il form è quello anche perché c'è soltanto quello nella pagina, e comunque 
ho provato anche ad assegnargli un id e l'ho richiamato dalla funzione 
correttamente, infatti l'alert funge. Non capisco però perché non mi vuole 
caricare la pagina. Pare che il submit() funzioni ma non l'action...
ciao Vaist 

 Leo
Sì, il form è uno solo, quindi con forms[0] andavo sul sicuro. Comunque l'ho 
richiamato anche tramite getElementById("nomeForm") e funziona, infatti mi 
visualizza l'alert che ho inserito dentro la funzione.
Tra l'altro dopo il click sul pulsante e dopo la visulizzazione dell'alert 
vedo che effettivamente la pagina invia i dati, presumibilmente, perché 
innanzitutto la vedo ricaricarsi e poi i campi nel form spariscono. Però c'è 
il problema appunto della pagina dell'action che non viene caricata e poi 
non vedo la stringa di interrogazione nell'indirizzo eppure ho impostato il 
metodo get.
Posso provare a montare tutto su un server e vedere se i dati vengono 
inviati ma rimane il fatto che mi ricarica la stessa pagina invece che 
andare sullo script.
ciao Vaist 

 ha scritto
Ragazzi, ho provato a dargli un indirizzo completo nell'action della 
funzione e sono ad esempio riuscito a caricare la pagina di google, quindi 
ha funzionato. Ma perché se imposto l'action ad un file interno (con 
percorso relativo) non funge? Io sto operando in locale, non ho installato 
nessun server web, ed effettivamente non esiste neanche il file mail.php 
però dovrebbe comunque rimandare a quel file, o sbaglio?
Immagino che se monto tutto su un server debba dare un percorso assoluto, 
tipo: 
www.miosito.it/mail.php
 anziché mail.php
può essere?
ciao Vaist 

 caricare la pagina. Pare che il submit() funzioni ma non l'action...
Due cose:
a) Installa Firebug e vedi il traffico di rete cosa ti dice.
b) Butta tutto online e dacci il link così evitiamo di andare alla
cieca e per tentativi.
Le informazioni base te le abbiamo fornite, c'è poco altro da fare
senza aver sottomano la pagina effettiva. Se si fosse trattato del
click su un link un senso c'era anche.. ma tu l'onclick lo imposti
su un tag img.
Al limite, puoi sempre vedere se hai lo stesso comportamento su di
una pagina neutra, solo con il codice incriminato qualcosa come:
<script type="text/javascript">
	function f(){
		document.forms[0].action = "testme.htm";
		document.forms[0].submit();
	}
</script>
 
<form method="get">
	<input type="text" name="foo" value="bar" />
	<input type="button" onclick="f()" />
</form>
Se il problema sussiste, allora hai un'installazione bacata di FF.
-- 
~ Il lavoro è quel lasso di tempo che intercorre tra una pausa caffè e
l'altra.

 Se il problema sussiste, allora hai un'installazione bacata di FF.
Ciao Zero, lo avevo provato su uno script neutro come il tuo e mi 
funzionava. Comunque ho risolto, ma non chiedermi come perché non lo so :-) 
Nel senso che prima non mi funzionava poi ho inciarfugliato sul codice ed ha 
preso a funzionare. Non so che cambiamenti abbia apportato effettivamente, 
ma di fatto la funzione è rimasta la stessa. Comunque ho fatto così, ho 
messo lo script mail.php su un server e poi ho fatto dei tentativi di invio 
form e tutto funzionava alla perfezione. Ripeto, non so come però, perché in 
locale non mi caricava lo script, al di là del fatto che non avrei avuto un 
web server, ma questo è un altro discorso che non credo abbia influenza.
ciao e grazie per tutti i consigli, mi siete stati di aiuto e di sprone per 
la soluzione del problema di cui ancora mi sfugge l'origine...
Vaist 

 web server, ma questo è un altro discorso che non credo abbia influenza.
Eh no, influenza eccome. :) E l'influenza varia anche da browser a
browser. Ricordati sempre che se vuoi testare qualcosa in locale è
sempre buona norma utilizzare un web server.
La cosa migliore, sarebbe utilizzare lo stesso web server del tipo
che troverai sul server remoto effettivo (a maggior ragione se poi
devi anche lavorare server side, ma tant'è). :)
-- 
"Se c'è qualcosa di più importante del mio ego su questa nave,
la voglio catturata e fucilata."

 devi anche lavorare server side, ma tant'è). :)
Ok, allora mi installerò wamp che è la piattaforma che userò per il sito. 
Grazie per il consiglio, non pensavo...
ciao Vaist