2012-01-04 35 views
23

Tengo un formulario como el siguiente:Envíe el formulario a otra página (que es diferente de la página utilizada en acción)

index.php

<form method="post" action="send.php"> 
    <textarea name="msg" id="msg"></textarea> 
    <input type="submit" value="Send" /> 
</form> 

Por lo tanto, si entro algo en área de texto y hacer clic en "Enviar", se envía a la página "send.php". Pero quiero incluir otro botón para obtener una vista previa. Es decir, cuando se hace clic en este botón, el formulario anterior se envía a "preview.php", que se abrirá en una nueva ventana/pestaña en blanco (página original, es decir, index.php estará allí intacto). Esto es para mostrar una vista previa del mensaje que el usuario va a enviar.

No sé cómo hacer esto.

Respuesta

27

el uso de JavaScript para cambiar temporalmente la acción y objetivo:

<form method="post" action="send.php" id="idOfForm"> 
    <textarea name="msg" id="msg"></textarea> 
    <input type="submit" value="Send" /> 
</form> 
<button onclick="doPreview();">Preview</button> 
<script type="text/javascript"> 
    function doPreview() 
    { 
     form=document.getElementById('idOfForm'); 
     form.target='_blank'; 
     form.action='preview.php'; 
     form.submit(); 
     form.action='send.php'; 
     form.target=''; 
    } 
</script> 
+0

¡No sabía que puede tener un blanco en blanco para la forma! ¡Es impresionante! –

+0

@VppMan Sería bueno ver cómo lo mezclaste. – Andremoniy

0

Puede usar JavaScript para cambiar la acción del formulario cuando se hace clic en el botón y luego enviarlo.

O simplemente envíe el formulario a través de AJAX y luego redirigir después de obtener una respuesta.

0
<form onreturn="someJavascriptFunction()" action="" method=""> 

crear una función js capaz de abrir esta página de vista previa

+0

No veo "onreturn" en los documentos de formularios. – Noumenon

7

Da tu forma de un ID (Form1). La acción de la forma actual puede ser controlado de esta manera:

function setPreview() { 
    $('#form1').attr('target','_blank') 
    $('#form1').attr('action','http://yourpreviewurl.php') 
    $('#form1').submit() 
} 

function setSubmit() { 
    $('#form1').attr('target','') 
    $('#form1').attr('action','http://yourposturl.php') 
    $('#form1').submit() 
} 

Tiene dos botones, ambos type="button", una para llamar setPreview y otro para llamar setSubmit

+1

gracias. Mezclé jQuery con la idea de Aaron J Spetner. –

+0

Este [artículo] (https://mentaljetsam.wordpress.com/2008/06/02/using-javascript-to-post-data-between-pages/) da un paso más y proporciona una implementación bastante genérica. – jpaugh

7

Existe ahora un atributo para presentar la entrada que se encarga de esto:

<input type="submit" formaction=”differentThanNormalAction.php”> 
+0

Perfecto, gracias! – raphael

Cuestiones relacionadas