Jak otworzyć nowe okno po przesłaniu formularza

127

Mam formularz przesyłania i chcę, aby otwierało się nowe okno, gdy użytkownicy przesyłają formularz, abym mógł śledzić go w programie Analytics.

Oto kod, którego używam:

<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>
Michael Currie
źródło

Odpowiedzi:

272

Nie potrzebujesz Javascript, wystarczy dodać target="_blank"atrybut w tagu formularza.

<form target="_blank" action="http://example.com"
      method="post" id="mc-embedded-subscribe-form"
      name="mc-embedded-subscribe-form" class="validate"
>
Konstantinos
źródło
5
jeśli dodasz target = _blank, nie potrzebujesz zdarzenia onClick.
WhyNotHugo
5
Cieszę się, że natknąłem się na ten post! Dodanie target = "_ blank" do tagu formularza rozwiązało mój problem związany z koniecznością otwierania nowego okna!
kaitlynjanine
3
to nie do końca odpowiada na pytanie OP, ale jest bardziej użyteczną odpowiedzią w ogóle - użyj target="_blank"zamiast JavaScript
Kip
2
target = "blank" działa dobrze. developer.mozilla.org/en-US/docs/HTML/Element/form
Eric
5
przynajmniej w IE 11, target = "_ blank" tworzy nową kartę w aktualnym oknie przeglądarki zamiast tworzyć nowe okno przeglądarki ..... IMHO, nowa karta różni się od nowego okna przeglądarki
Marcelo Bezerra
33

W internetowej aplikacji bazy danych, która wykorzystuje wyskakujące okienko do wyświetlania wydruków danych z bazy danych, działało to wystarczająco dobrze dla naszych potrzeb (testowane w Chrome 48):

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

Sztuczka polega na dopasowaniu targetatrybutu w <form>tagu z drugim argumentem w window.openwywołaniu w onsubmitmodule obsługi.

Awerealis
źródło
Daje to kontrolę rozmiaru okna. Doskonały.
Chalky
najlepsze rozwiązanie na tej stronie, przetestowane i działa perfekcyjnie.
Manny Ramirez,
Właśnie tego szukałem podczas generowania pliku PDF w osobnym oknie podczas przesyłania.
jrob007
7

onclickmoże nie być najlepszym wydarzeniem, do którego można dołączyć tę akcję. Za każdym razem, gdy ktoś kliknie w dowolnym miejscu formularza, otworzy się okno.

<form action="..." ...
    onsubmit="window.open('google.html', '_blank', 'scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');return true;">
Grant Wagner
źródło
7

Aby uzyskać podobny efekt do targetatrybutu formularza , możesz również użyć formtargetatrybutu input[type="submit]"lub button[type="submit"].

Z MDN :

... ten atrybut to nazwa lub słowo kluczowe wskazujące, gdzie wyświetlić odpowiedź otrzymaną po przesłaniu formularza. To jest nazwa lub słowo kluczowe kontekstu przeglądania (na przykład karta, okno lub ramka wbudowana). Jeśli ten atrybut jest określony, zastępuje atrybut docelowy właściciela formularza elementów. Następujące słowa kluczowe mają specjalne znaczenie:

  • _self: Załaduj odpowiedź do tego samego kontekstu przeglądania, co bieżący. Ta wartość jest wartością domyślną, jeśli atrybut nie jest określony.
  • _blank: Załaduj odpowiedź do nowego nienazwanego kontekstu przeglądania.
  • _parent: Załaduj odpowiedź do nadrzędnego kontekstu przeglądania bieżącego. Jeśli nie ma rodzica, ta opcja zachowuje się tak samo jak _self.
  • _top: Załaduj odpowiedź do kontekstu przeglądania najwyższego poziomu (to znaczy kontekstu przeglądania, który jest przodkiem bieżącego i nie ma elementu nadrzędnego). Jeśli nie ma rodzica, ta opcja zachowuje się tak samo jak _self.
alxs
źródło
Bardzo przydatne w przypadku posiadania wielu przycisków przesyłania.
hrvoj3e
Wygląda na to, że usunęli tę zawartość ze strony elementu wejściowego. Podobne informacje na temat atrybutu formtarget można znaleźć na stronie elementu przycisku: developer.mozilla.org/en-US/docs/Web/HTML/Element/ ...
peater
3

Podany przez Ciebie kod musi zostać poprawiony. W tagu formularza musisz umieścić wartość atrybutu onClick w podwójnym cudzysłowie:

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

Musisz również uważać, aby pierwszy parametr programu window.openrównież był ujęty w cudzysłów.

Sourabh
źródło
2

Generalnie używam małego fragmentu jQuery na całym świecie do otwierania wszelkich zewnętrznych linków w nowej karcie / oknie. Dodałem selektor do formularza dla mojej własnej strony i jak na razie działa dobrze:

// URL target
    $('a[href*="//"]:not([href*="'+ location.hostname +'"]),form[action*="//"]:not([href*="'+ location.hostname +'"]').attr('target','_blank');
luminancedesign
źródło
0

Uważam, że ta jquery działa dobrze, sprawdź poniższy kod.

dzięki temu akcja przesyłania zadziała i otworzy łącze w nowej karcie, niezależnie od tego, czy chcesz ponownie otworzyć adres URL akcji, czy też nowy link

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

Ten kod działa dla mnie idealnie ...

Abhi
źródło
-4

window.open nie działa we wszystkich przeglądarkach, Google to i znajdziesz sposób na wykrycie prawidłowego typu okna dialogowego.

Przenieś również wywołanie onclick do przycisku wejściowego, aby było uruchamiane tylko wtedy, gdy użytkownik przesyła.

cjk
źródło
1
onclick na przycisku wprowadzania jest nieprawidłowe. Następnie, jeśli użytkownik go kliknie, ale odsunie się przed puszczeniem, nadal będzie odpalać.
Matthew Flaschen
-12

Na to też znalazłem rozwiązanie. Ta strona pomogła mi dzisiaj, więc również tutaj ponownie publikuję.

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

Powyższy kod to kod dla jednego przycisku. Po naciśnięciu przycisku nastąpi ponowne narysowanie bieżącego ekranu od zakupu do wstępnej akceptacji. W tym samym czasie otwiera nowe okno i przekazuje je firmie PayPal.

user2737761
źródło
5
OP powiedział, że jest nowy w kodowaniu - IMO publikowanie całego ładunku (okropnie sformatowanego) kodu związanego z przyciskami Paypal nie pomoże im
Mike