Newsgroup: it.comp.lang.javascript
Titolo: [promtp] firefox si, ie no

situazione:
ho una pagina che contiene un datagrid ricavato in php da mysql.
ogni record ha un'icona che cliccandoci apre un prompt che chiede di 
inserire un valore.
a seconda del valore scritto deve fare niente o inviare una form.
su firefox funziona tutto regolarissimo, su IE sembra funzionare ma non 
ne vuol sapere di inviare sta form.
il codice in <head>:
<script language="JavaScript">
function chgname(oldname,idrec,fldname)
{
var newname=prompt('cambia il nome del file :',oldname);
return newname;
if (newname!=oldname) { document.miaform.submit(); }
}
</script>
nel <body>:
<a href="javascript:chgname('nome1','2','campo');">cambia</a>
<form name="miaform" method="post" action="sub.php">
<input type="hidden" name="val" value="pippo>
</form>
perche' firefox funziona e ie no?
sp-

 <input type="hidden" name="val" value="pippo>
occhio alle virgolette mancanti --------------^

 occhio alle virgolette mancanti --------------^
visto (dopo che ho inviato il msg, mannaggia)
:)
anche questo errore di digitazione nel msg, ma nel file e' ok.
ecco allora il codice completo/rivisto.
in head:
<script language="JavaScript">
function chgname(oldname,idrec,fldname)
{
newname=prompt('cambia il nome del file :',oldname);
if (newname!=oldname)
{
document.miaform.oldfilename.value=oldname;
document.miaform.newfilename.value=newname;
document.miaform.idrec.value=idrec;
document.miaform.idrec.value=fldname;
document.miaform.submit();
}
</script>
in body:
<a href="javascript:chgname('nome1','2','campo');">cambia</a>
<form action="sub.php" method="post" name="miaform">
<input type="hidden" name="fldname" value="">
<input type="hidden" name="oldfilename" value="">
<input type="hidden" name="newfilename" value="">
<input type="hidden" name="idrec" value="">
</form>
ciao
sp-

 </script>

[...]
Non ho capito: hai risolto?

 Non ho capito: hai risolto?
makke' :(
sono al punto di partenza.
ho notato pero' una cosa: cercando in rete altri esempi la cosa funziona 
anche su ie, a patto pero' che la dialog del prompt sia lanciata in 
automatico dalla pagina stessa che viene caricata.
mentre da function come nel mio caso ie non va.
non da' errore, semplicemente non va.
ho provato con degli alert per verificare se effettivamente ie faceva 
bene il confronto tra i due valori "if (newname!=oldname)" e con gli 
alert va tutto.
soltanto che ie sembra ignorare l'istruzione verso form (ma anche 
document.location, window.location, document.href ...).
che strano comportamento!!
:(
sp-

 che strano comportamento!!
Vista la mia fretta, ho fatto una prova al volo solo con ie6 e va come 
dovrebbe andare (ovviamente parlo del codice che hai postato, se hai 
omesso qualcosa presente nella pagina e' un altro paio di maniche).
Saro' anche inebetito dalla settimana ma non vedo molte possibilita' di 
comportamenti strani, quindi fai queste due prove:
1) la function non restituisce esplicitamente valori e quindi non 
dovrebbe incriccare tutto assegnando qualcosa all'attributo href in 
contemporanea con la spedizione del form ma con ie... non si sa mai.
Cambia il link con <a href="#" onclick="return funzione()"> e piazza un 
bel return false al termine della tua funzione.
2) per puro scrupolo prova a sottoporre ad un timeout la spedizione del 
form (se non funzionasse la prova 1).
3) se c'e' altra roba sulla pagina facci vedere il codice completo

 bel return false al termine della tua funzione.
ok adesso funzia.
funzia anche se lascio javascript:; (il fatto e' che lo preferisco 
perche' cosi' non si torna a capo pagina).
pare che ie6 non ha bisogno del return funzione() mentre ie5 si.
cmq funzia! :)
gracias ^__^
sp-

 cmq funzia! :)
mamma mia che orrore che ho scritto..
"pare che ie6 non HA (?)..."
non ABBIA! :-))))
sp-

 perche' cosi' non si torna a capo pagina).
Non e' quello il punto. Quando scrivi un event handler nel codice html 
stai scrivendo il corpo della funzione che gestira' l'evento.
Ovvero scrivere:
<a href="#" onclick="[istruzioni]">...</a>
In javascript diventerebbe:
tuoElemento.onclick=function(){ [istruzioni] }
Il valore restituito dalla funzione al gestore di eventi modifica la 
propagazione dell'evento. Senza che scendiamo troppo nei particolari nel 
caso di un tag <a> un valore false restituito a onclick impedisce 
l'esecuzione di cio' che e' impostato nell'attributo href.
In caso contrario href viene eseguito e, come puoi ben immaginare <a 
href="#"> riporta per forza di cose a inizio pagina.
Quindi, probabilmente (non ho fatto test), explorer 5 cerca di eseguire 
cio' che hai in href e contemporaneamente di spedire il form, e la 
contemporaneita' lo manda in crisi.
E' per questo che ti ho suggerito questa prova.
Ricapitolando:
function foo(){
	/* tuo codice */
	return false;
}
<a href="#" onclick="return foo()">
Cosi' impostato vengono eseguite le istruzioni nella funzione e non 
viene considerato cio' che si trova in href (che comporterebbe un cambio 
di location).