Cómo abrir una nueva ventana en el formulario enviar


127

Tengo un formulario de envío y quiero que se abra una nueva ventana cuando los usuarios envíen el formulario para poder seguirlo en análisis.

Aquí está el código que estoy usando:

<form action="http://URL at mailchimp subscriber URL.com" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" onclick=window.open(google.html,'','scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');>
    <label for="name">Your Name</label><input type="text" value="" name="FNAME" class="required" id="mce-FNAME">
    <br/>
    <br/>
    <label for="email">Your Email </label><input type="text" value="" name="EMAIL" class="required email" id="mce-EMAIL">
    <br/>
    <br/>
    <input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="submit">
</form>
</div>

Respuestas:


272

No necesita Javascript, solo tiene que agregar un target="_blank"atributo en su etiqueta de formulario.

<form target="_blank" action="http://example.com"
      method="post" id="mc-embedded-subscribe-form"
      name="mc-embedded-subscribe-form" class="validate"
>

55
si agrega target = _blank, no necesita el evento onClick.
WhyNotHugo

55
Me alegro de haber tropezado con esta publicación! ¡Agregar target = "_ blank" a la etiqueta del formulario resolvió mi problema de tener que abrir una nueva ventana!
kaitlynjanine

3
esto no responde exactamente a la pregunta del OP, pero es la respuesta más útil en general: uso en target="_blank"lugar de Javascript
Kip

2
target = "blank" funciona bien. developer.mozilla.org/en-US/docs/HTML/Element/form
Eric

55
al menos en IE 11, target = "_ blank" crea una nueva pestaña en la ventana del navegador actual en lugar de crear una nueva ventana del navegador ... En mi humilde opinión, una nueva pestaña es diferente de una nueva ventana del navegador
Marcelo Bezerra

33

En una aplicación de base de datos basada en la web que utiliza una ventana emergente para mostrar impresiones de datos de la base de datos, esto funcionó lo suficientemente bien para nuestras necesidades (probado en Chrome 48):

<form method="post" 
      target="print_popup" 
      action="/myFormProcessorInNewWindow.aspx"
      onsubmit="window.open('about:blank','print_popup','width=1000,height=800');">

El truco es hacer coincidir el targetatributo en la <form>etiqueta con el segundo argumento en la window.openllamada en el onsubmitcontrolador.


Esto le da control del tamaño de la ventana. Excelente.
Chalky

La mejor solución en esta página, la probé y funciona a la perfección.
Manny Ramirez

Esto es exactamente lo que estaba buscando al generar un PDF en una ventana separada al enviar.
jrob007

7

onclickpuede no ser el mejor evento para adjuntar esa acción. Cada vez que alguien haga clic en cualquier parte del formulario, se abrirá la ventana.

<form action="..." ...
    onsubmit="window.open('google.html', '_blank', 'scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');return true;">

7

Para un efecto similar al targetatributo del formulario , también puede usar el formtargetatributo de input[type="submit]"o button[type="submit"].

De MDN :

... este atributo es un nombre o palabra clave que indica dónde mostrar la respuesta que se recibe después de enviar el formulario. Este es un nombre o una palabra clave para un contexto de exploración (por ejemplo, pestaña, ventana o marco en línea). Si se especifica este atributo, anula el atributo de destino del propietario del formulario de los elementos. Las siguientes palabras clave tienen significados especiales:

  • _self: carga la respuesta en el mismo contexto de navegación que el actual. Este valor es el predeterminado si no se especifica el atributo.
  • _blank: carga la respuesta en un nuevo contexto de navegación sin nombre.
  • _parent: carga la respuesta en el contexto de exploración principal del actual. Si no hay padre, esta opción se comporta de la misma manera que _self.
  • _top: Cargue la respuesta en el contexto de exploración de nivel superior (es decir, el contexto de exploración que es un antecesor del actual y no tiene padre). Si no hay padre, esta opción se comporta de la misma manera que _self.

Muy útil cuando se tienen múltiples botones de envío.
hrvoj3e

Parece que eliminaron ese contenido de la página del elemento de entrada. Se puede encontrar información similar sobre el atributo formtarget en la página del elemento del botón: developer.mozilla.org/en-US/docs/Web/HTML/Element/…
peater

3

El código que ha proporcionado debe corregirse. En la etiqueta de formulario, debe incluir el valor del atributo onClick entre comillas dobles:

"window.open('google.htm','','scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');"

También debe tener cuidado de que el primer parámetro de window.opentambién se incluya entre comillas.


2

Por lo general, utilizo un pequeño fragmento de jQuery a nivel mundial para abrir cualquier enlace externo en una nueva pestaña / ventana. He agregado el selector para un formulario para mi propio sitio y hasta ahora funciona bien:

// URL target
    $('a[href*="//"]:not([href*="'+ location.hostname +'"]),form[action*="//"]:not([href*="'+ location.hostname +'"]').attr('target','_blank');

0

Creo que este jquery funciona bien para usted, consulte el siguiente código.

esto hará que su acción de enviar funcione y abra un enlace en una pestaña nueva, ya sea que desee abrir la URL de acción nuevamente o un nuevo enlace

jQuery('form').on('submit',function(e){
setTimeout(function () { window.open('https://www.google.com','_blank');}, 1000);});})

Este código me funciona perfecto ...


-4

window.open no funciona en todos los navegadores, Google y encontrará una forma de detectar el tipo de diálogo correcto.

Además, mueva la llamada onclick al botón de entrada para que solo se active cuando el usuario envíe.


1
onclick en el botón de entrada está mal. Luego, si el usuario hace clic en él, pero se aleja antes de soltarlo, seguirá disparando.
Matthew Flaschen

-12

Encontré una solución a esto también. Esta página me ayudó hoy, así que estoy volviendo a publicar aquí también.

/** This is the script that will redraw current screen and submit to paypal. */
echo '<script>'."\n" ;
echo 'function serverNotifySelected()'."\n" ;
echo '{'."\n" ;
echo '    window.open(\'\', \'PayPalPayment\');'."\n" ;
echo '    document.forms[\'paypal_form\'].submit();'."\n" ;
echo '    document.forms[\'server_responder\'].submit();'."\n" ;
echo '}'."\n" ;
echo '</script>'."\n" ;

/** This form will be opened in a new window called PayPalPayment. */
echo '<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" name="paypal_form" method="post" target="PayPalPayment">'."\n" ;
echo '<input type="hidden" name="cmd" value="_s-xclick">'."\n" ;
echo '<input type="hidden" name="custom" value="'.$transaction_start.'">'."\n" ;
echo '<input type="hidden" name="hosted_button_id" value="'.$single_product->hosted_button_id.'">'."\n" ;
echo '<table>'."\n" ;
echo '    <tr>'."\n";
echo '        <td><input type="hidden" name="'.$single_product->hide_name_a.'" value="'.$single_product->hide_value_a.'">Local</td>'."\n" ;
echo '    </tr>'."\n" ;
echo '    <tr>'."\n" ;
echo '        <td>'."\n" ;
echo '        <input type="hidden" name="'.$single_product->hide_name_b.'" value="'.$single_product->hide_value_b.'" />'.$single_product->short_desc.' $'.$adj_price.' USD'."\n" ;
                // <select name="os0">
                //     <option value="1 Day">1 Day $1.55 USD</option>
                //     <option value="All Day">All Day $7.50 USD</option>
                //     <option value="3 Day">3 Day $23.00 USD</option>
                //     <option value="31 Day">31 Day $107.00 USD</option>
                // </select>
echo '        </td>'."\n" ;
echo '    </tr>'."\n" ;
echo '</table>'."\n" ;
echo '<input type="hidden" name="currency_code" value="USD">'."\n" ;
echo '</form>'."\n" ;

/** This form will redraw the current page for approval. */
echo '<form action="ProductApprove.php" name="server_responder" method="post" target="_top">'."\n" ;
echo '<input type="hidden" name="trans" value="'.$transaction_start.'">'."\n" ;
echo '<input type="hidden" name="prod_id" value="'.$this->product_id.'">'."\n" ;
echo '</form>'."\n" ;

/** No form here just an input and a button.  onClick will handle all the forms */
echo '<input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" alt="PayPal - The safer, easier way to pay online!" onclick="serverNotifySelected()">'."\n" ;
echo '<img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">'."\n" ;

El código anterior es el código para un botón. Presiona el botón y volverá a dibujar la pantalla actual desde la compra hasta la aprobación previa. Al mismo tiempo, abre una nueva ventana y le entrega esa nueva ventana a PayPal.


55
El OP ha dicho que son nuevos en el código: la OMI que publica una carga completa de código (horriblemente formateado) relacionado con los botones de Paypal no los ayudará
Mike
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.