Come aprire una nuova finestra sull'invio del modulo


127

Ho un modulo di invio e desidero che apra una nuova finestra quando gli utenti inviano il modulo in modo da poterlo tracciare sull'analisi.

Ecco il codice che sto 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>

Risposte:


272

Non è necessario Javascript, devi solo aggiungere un target="_blank"attributo nel tag del modulo.

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

5
se aggiungi target = _blank, non hai bisogno dell'evento onClick.
— WhyNotHugo,

5
Sono contento di essermi imbattuto in questo post! L'aggiunta di target = "_ blank" al tag del modulo ha risolto il mio problema di dover aprire una nuova finestra!
— Kaitlynjanine,

3
questo non risponde esattamente alla domanda del PO, ma è la risposta più utile in generale, target="_blank"invece di Javascript
— Kip,

2
target = "blank" funziona bene. developer.mozilla.org/en-US/docs/HTML/Element/form
— Eric

5
almeno su IE 11, target = "_ blank" crea una nuova scheda nella finestra del browser corrente invece di creare una nuova finestra del browser ..... IMHO, una nuova scheda è diversa da una nuova finestra del browser
— Marcelo Bezerra

33

In un'applicazione di database basata sul Web che utilizza una finestra pop-up per visualizzare stampe dei dati del database, questo ha funzionato abbastanza bene per le nostre esigenze (testato in Chrome 48):

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

Il trucco è abbinare l' targetattributo sul <form>tag al secondo argomento della window.openchiamata nel onsubmitgestore.


Questo dà il controllo della dimensione della finestra. Eccellente.
— Chalky,

migliore soluzione in questa pagina, testata e funziona alla perfezione.
— Manny Ramirez,

Questo è esattamente quello che stavo cercando quando ho generato un PDF in una finestra separata su submit.
— jrob007,

7

onclickpotrebbe non essere il miglior evento a cui allegare tale azione. Ogni volta che qualcuno fa clic in qualsiasi punto del modulo, si aprirà la finestra.

<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

Per un effetto simile targetall'attributo form , puoi anche usare l' formtargetattributo di input[type="submit]"obutton[type="submit"] .

Da MDN :

... questo attributo è un nome o una parola chiave che indica dove visualizzare la risposta ricevuta dopo aver inviato il modulo. Questo è un nome o una parola chiave per un contesto di navigazione (ad esempio scheda, finestra o frame incorporato). Se questo attributo viene specificato, sovrascrive l'attributo target del proprietario del modulo degli elementi. Le seguenti parole chiave hanno significati speciali:

  • _self: carica la risposta nello stesso contesto di navigazione di quella corrente. Questo valore è predefinito se l'attributo non è specificato.
  • _blank: carica la risposta in un nuovo contesto di navigazione senza nome.
  • _parent: carica la risposta nel contesto di navigazione principale di quello corrente. Se non esiste un genitore, questa opzione si comporta allo stesso modo di _self.
  • _top: carica la risposta nel contesto di navigazione di livello superiore (ovvero, il contesto di navigazione che è un antenato di quello corrente e non ha parent). Se non esiste un genitore, questa opzione si comporta allo stesso modo di _self.

Molto utile quando si hanno più pulsanti di invio.
— hrvoj3e,

Sembra che abbiano rimosso quel contenuto dalla pagina dell'elemento di input. Informazioni simili sull'attributo formtarget sono disponibili nella pagina dell'elemento pulsante: developer.mozilla.org/en-US/docs/Web/HTML/Element/…
— peater

3

Il codice che hai fornito deve essere corretto. Nel tag del modulo devi racchiudere il valore dell'attributo onClick tra virgolette doppie:

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

È inoltre necessario assicurarsi che anche il primo parametro di window.opensia racchiuso tra virgolette.


2

In genere utilizzo un piccolo frammento jQuery a livello globale per aprire eventuali collegamenti esterni in una nuova scheda / finestra. Ho aggiunto il selettore per un modulo per il mio sito e funziona bene finora:

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

0

credo che questo jquery funzioni bene per te, controlla un codice qui sotto.

questo farà funzionare l'azione di invio e aprirà un collegamento in una nuova scheda se si desidera aprire nuovamente l'URL dell'azione o un nuovo collegamento

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

Questo codice funziona perfettamente per me ..


-4

window.open non funziona su tutti i browser, Google e troverai un modo per rilevare il tipo di dialogo corretto.

Inoltre, sposta la chiamata onclick sul pulsante di input affinché si attivi solo quando l'utente invia.


1
il clic sul pulsante di input è errato. Quindi, se l'utente fa clic su di esso, ma si allontana prima di rilasciarlo, si attiverà comunque.
— Matthew Flaschen,

-12

Ho trovato una soluzione anche a questo. Questa pagina mi ha aiutato oggi, quindi, sto postando di nuovo anche qui.

/** 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" ;

Il codice sopra è il codice per un pulsante. Premi il pulsante e ridisegna la schermata corrente dall'acquisto alla pre-approvazione. Allo stesso tempo apre una nuova finestra e passa quella nuova finestra a PayPal.


5
L'OP ha affermato che sono nuovi al codice: l'IMO che pubblica un intero carico di codice (orribilmente formattato) relativo ai pulsanti di Paypal non li aiuterà
— Mike,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.