Ahhh!!! Adesso è più chiaro! E' un po' come facevamo noi in un gestionale via web...usavamo le popup come Lookup per popolare dei campi della finestra che le aveva aperte, che a sua volta era una popup. Quando si inviava il form di questa seconda popup, la finestra si chiudeva e i dati erano inseriti nel DB e la pagina principale (che leggeva il DB) veniva aggiornata.
In questo caso, il codice che ti ho postato rimane valido (sempre col setTimeout(), per dare tempo ai dati di essere inviati). Tuttavia, noi usavamo un sistema particolare per evitare che anche il timeout andasse in errore. In pratica, usavamo un iframe nella popup (che conteneva una pagina vuota). Quando cliccavi su submit, i dati del form venivano inviati in post alla pagina che conteneva il programma che li inseriva nel database. Questa pagina era richiamata dentro l'iframe della popup e conteneva appunto il codice che ti ho postato (non ricordo se all'onload o come script alla fine della pagina). L'unica modifica è che al posto di 'window.close()', dovresti scrivere 'top.close()' (trattandosi di una pagina in un iframe).
In pratica, avevamo un codice fatto così per la popup:
codice:
<iframe src="vuoto.htm" name="Main" frameborder="0" scrolling="no" width="100%" height="150"></iframe>
<form name="Modulo" action="inserisci.php" method="post" target="Main">
......
<input type="submit" name="invio" value="Invia">
</form>
Quando cliccavi sul submit, la pagina "vuoto.htm" presente nell'iframe veniva sostituita dalla pagina "inserisci.php" che conteneva lo script per inviare i dati al DB. Alla fine (o all'onload, non ricordo), la pagina "inserisci.php" aveva il famoso script con setTimeout('top.close()',2000), che chiudeva la popup.
Quello che voglio dire è che cmq devi aggiornare la pagina corrente nella popup per chiuderla, o sostituirla con un'altra pagina per ottenere quello che vuoi. Ci sarebbe l'alternativa di usare lo script che ti ho postato (con window.close()) al submit del form con questo codice:
codice:
<form action="..." method="..." onsubmit="setTimeout('window.close()',2000);">
Purtroppo c'è un problema non da poco: onsubmit viene eseguito PRIMA che il form sia inviato. Quindi, anche se aumenti il valore per setTimeout(), magari portandolo a 5000, ottieni solo di ritardare l'esecuzione di quel codice, ma non sei mai sicuro che nel frattempo i tuoi dati siano stati inviati tutti. Lo stesso avverrebbe se usassi lo stesso script richiamandolo con l'onclick sul pulsante del submit:
codice:
<input type="submit" value="Invia" onclick="setTimeout('window.close()',2000);">
Insomma, la soluzione più "sicura" è fare in modo che sia un'altra pagina (interna o sostituita a quella corrente) a chiudere la popup.
PS: quando apri la popup, non usare solo open(), ma usa window.open(). open() è un metodo sia dell'oggetto window che dell'oggetto document, quindi è meglio specificare "quale dei due" vuoi aprire.