Ciao il tuo problema mi ha incuriosito e allora ti propongo questa soluzione che preserva un minimo di accessibilità alle tue pagine
partiamo con l'html :
codice:
<html>
<head>
<script type="text/javascript" src="file_javascript_esterno.js"></script>
</head>
<script type="text/javascript">
var regola='<style type="text/css">#submit {display:none} <\/style>'
document.write(regola);
</script>
<body>
<form action="pagina.asp" method="get" id="mioform" onsubmit="return false">
Nome <input type="text" name="nome">
Cognome <input type="text"name="cognome">
<input type="submit" value="invia" id="submit">
</form>
<script type="text/javascript">
var link=document.createElement("a");
var text=document.createTextNode("prova");
link.setAttribute('href','javascript:make_window("mioform");');
link.appendChild(text);
var form=document.getElementById("mioform");
form.appendChild(link);
</script>
<div id="risultato"></div>
</body>
</html>
Dunque abbiamo un form con due campi di testo e un pulsate submit. Chi ha javascript disabilitato vedrà questo e non sarà in alcun modo condizionato in quanto compilando il form la pagina viene restituita col classico modo tramite l'action del form.
Altrimenti tramite la regola css scritta con document.write prendiamo il tasto submit che ha id "submit" e gli mettiamo un bel display:none che,combinato con onsubmit="return false" del form,impedisce di fatto l'invio del modulo.
Inoltre subito dopo aver chiuso </form> (e quindi è un oggetto del Dom che puo essere istanziato) ci creiamo l'elemento link il cui href lo facciamo puntare tramite protocollo javascript alla funzione make_window() - che è inclusa nel file esterno - passandole come parametro l'id del form.
vediamo ora il javascript esterno:
codice:
var current_url="";
var new_window=null;
function make_window(id_form) {
var new_url=make_url(document.getElementById(id_form));
if (!new_window || new_window.closed) new_window=window.open(new_url,"","");
else (new_url==current_url)?new_window.focus():new_window.location.href=new_url;
current_url=new_url;
}
function make_url(form) {
var url="pagina.asp?";
var nome_valore="";
var contatore=0;
var campi_testo= new Array();
for (var a=0;a<form.elements.length;a++) {
if (form.elements[a].type=="text") {
campi_testo[contatore]=form.elements[a];
contatore++;
}
}
for (var i=0;i<campi_testo.length;i++) {
nome_valore=campi_testo[i].name + "=" + escape(campi_testo[i].value);
(i!=campi_testo.length-1)?url+=nome_valore+"&":url+=nome_valore;
}
return url;
}
Abbiamo due funzioni:
la prima,make_url(form), prende come parametro l'oggetto form e si costruisce prima l'array dei campi di testo presenti (è una operazione ausiliaria che semplifica l'operazione dopo) e poi costruisce l'url con il classico concatenamento di stringhe (la funzione escape serve a codificare i caratteri non permessi in un url eventualmente inseriti nei campi di input) e infine ritorna questo url.
La funzione make_window si serve di due variabili globali per tenere traccia dello stato della finestra secondaria e prevede alla sua apertira e/o al suo aggiornamento. Necessita come detto di un parametro che è l'id del form che poi sarà usato per parametrizzare la make_url.
Ho fatto tutto questo ambaradan iniziando alle 3 di notte dopo essere tornato da una festa e devo ammettere che è stato divertente...sennonchè quando ho finito mi sono accorto che fuori stava albeggiando da un pezzo! VVoVe: