2009-05-22 6 views
98

Ho un modulo di invio e voglio che apra una nuova finestra quando gli utenti inviano il modulo in modo da poterlo rintracciare nell'analisi.Come aprire una nuova finestra sul modulo inviare

Ecco il codice che sto utilizzando:

<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> 

risposta

216

Non c'è bisogno di Javascript, è sufficiente aggiungere un attributo target="_blank" nel tag form.

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

se si aggiunge il target = _blank, non è necessario l'evento onClick. – WhyNotHugo

+0

Questo è ancora sbagliato, per molteplici ragioni. La maggior parte delle citazioni è mancante e verrà attivata ogni volta che si fa clic sul modulo per qualsiasi motivo, non solo al submit. –

+4

Felice di essere incappato in questo post! L'aggiunta di target = "_ blank" al tag form ha risolto il mio problema di dover aprire una nuova finestra! – kaitlynjanine

-3

window.open non funziona in tutti i browser, Google e troverete un modo di rilevare il tipo di dialogo corretto.

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

+1

onclick sul pulsante di input è sbagliato. Quindi, se l'utente fa clic, ma si allontana prima di rilasciarlo, continuerà a sparare. –

3

Il codice che hai fornito, deve essere corretto. Nel tag form è necessario chiusa attributo onClick valore doppio apice:

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

È inoltre necessario fare in modo che il primo parametro di window.open dovrebbe anche essere racchiuso usando le virgolette.

7

onclick potrebbe non essere l'evento migliore per allegare tale azione a. Ogni volta che qualcuno fa clic in qualsiasi punto del modulo, 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;"> 
-9

Ho trovato una soluzione anche a questo. Questa pagina mi ha aiutato oggi, quindi sto postando 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 ridisegnerà la schermata corrente dall'acquisto alla pre-approvazione. Allo stesso tempo apre una nuova finestra e apre la nuova finestra su PayPal.

+3

L'OP ha detto che sono nuovi per il codice: l'IMO che invia un intero carico di codice (orribilmente formattato) relativo ai pulsanti Paypal non li aiuterà. – Mike

2

Generalmente uso un piccolo snippet jQuery a livello globale per aprire qualsiasi link esterno in una nuova scheda/finestra. Ho aggiunto il selettore per una forma 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'); 
12

In un'applicazione di database web-based che utilizza una finestra pop-up per visualizzare stampe di dati di 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 è quello di abbinare l'attributo target sul tag <form> con il secondo argomento nella window.open chiamata nel gestore onsubmit.

+0

Questo dà il controllo della dimensione della finestra. Eccellente. – Chalky

+0

migliore soluzione in questa pagina, testato e funziona alla perfezione. –

+0

Questo è esattamente quello che stavo cercando quando si genera un PDF in una finestra separata su submit. – jrob007

3

Per un effetto simile a quello del modulo di attributo target, è anche possibile utilizzare l'attributo formtarget di input[type="submit]" o button[type="submit"].

Da MDN:

... questo attributo è un nome o una parola chiave che indica dove per visualizzare la risposta che si riceve dopo l'invio del modulo. Questo è un nome o una parola chiave per un contesto di esplorazione (ad esempio, scheda, finestra o frame incorporato).Se questo attributo è 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 esplorazione di quello corrente. Questo valore è l'impostazione predefinita se l'attributo non è specificato.
  • _blank: carica la risposta in un nuovo contesto di esplorazione senza nome.
  • _parent: carica la risposta nel contesto di navigazione principale di quello corrente. Se non ci sono genitori, questa opzione si comporta allo stesso modo di _self.
  • _top: carica la risposta nel contesto di esplorazione di livello superiore (ovvero, il contesto di esplorazione che è un antenato di quello corrente e non ha un genitore). Se non ci sono genitori, questa opzione si comporta allo stesso modo di _self.