Làm thế nào để mở một cửa sổ mới trên mẫu gửi


127

Tôi có một biểu mẫu gửi và muốn nó mở một cửa sổ mới khi người dùng gửi biểu mẫu để tôi có thể theo dõi nó trên phân tích.

Đây là mã tôi đang sử dụng:

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

Câu trả lời:


272

Không cần Javascript, bạn chỉ cần thêm một target="_blank"thuộc tính trong thẻ biểu mẫu của bạn.

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

5
nếu bạn thêm mục tiêu = _blank, bạn không cần sự kiện onClick.
WhyNotHugo

5
Vui mừng khi vấp phải bài này! Thêm mục tiêu = "_ blank" vào thẻ biểu mẫu đã giải quyết vấn đề tôi cần mở một cửa sổ mới!
kaitlynjanine

3
điều này không trả lời chính xác câu hỏi của OP, nhưng nó là câu trả lời hữu ích hơn trong sử dụng target="_blank"thay vì Javascript
Kip

2
target = "blank" hoạt động tốt. developer.mozilla.org/en-US/docs/HTML/Euity/form
Eric

5
ít nhất là trên IE 11, target = "_ blank" tạo một tab mới trong cửa sổ trình duyệt hiện tại thay vì tạo cửa sổ trình duyệt mới ..... IMHO, một tab mới khác với cửa sổ trình duyệt mới
Marcelo Bezerra

33

Trong ứng dụng cơ sở dữ liệu dựa trên web sử dụng cửa sổ bật lên để hiển thị bản in dữ liệu cơ sở dữ liệu, điều này hoạt động đủ tốt cho nhu cầu của chúng tôi (được thử nghiệm trong Chrome 48):

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

Bí quyết là khớp targetthuộc tính trên <form>thẻ với đối số thứ hai trong lệnh window.opengọi trong onsubmittrình xử lý.


Điều này cho phép kiểm soát kích thước cửa sổ. Thông minh.
Phấn

giải pháp tốt nhất trong trang này, đã thử nghiệm nó và hoạt động đến mức hoàn hảo.
Manny Ramirez

Đây chính xác là những gì tôi đang tìm kiếm khi tạo tệp PDF thành một cửa sổ riêng biệt khi gửi.
jrob007

7

onclickcó thể không phải là sự kiện tốt nhất để đính kèm hành động đó. Bất cứ khi nào bất cứ ai nhấp vào bất cứ nơi nào trong mẫu, nó sẽ mở cửa sổ.

<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

Để có hiệu ứng tương tự với targetthuộc tính của biểu mẫu , bạn cũng có thể sử dụng formtargetthuộc tính của input[type="submit]"hoặc button[type="submit"].

Từ MDN :

... thuộc tính này là tên hoặc từ khóa cho biết nơi hiển thị phản hồi nhận được sau khi gửi biểu mẫu. Đây là tên của hoặc từ khóa cho bối cảnh duyệt web (ví dụ: tab, cửa sổ hoặc khung nội tuyến). Nếu thuộc tính này được chỉ định, nó sẽ ghi đè thuộc tính đích của chủ sở hữu biểu mẫu của các thành phần. Các từ khóa sau có ý nghĩa đặc biệt:

  • _elf: Tải phản hồi vào cùng bối cảnh duyệt web như bối cảnh hiện tại. Giá trị này là mặc định nếu thuộc tính không được chỉ định.
  • _blank: Tải phản hồi vào ngữ cảnh duyệt web chưa được đặt tên mới.
  • _parent: Tải phản hồi vào ngữ cảnh duyệt cha mẹ của bối cảnh hiện tại. Nếu không có cha mẹ, tùy chọn này hoạt động tương tự như chính mình.
  • _top: Tải phản hồi vào bối cảnh duyệt cấp cao nhất (nghĩa là bối cảnh duyệt là tổ tiên của hiện tại và không có cha mẹ). Nếu không có cha mẹ, tùy chọn này hoạt động tương tự như chính mình.

Rất hữu ích khi có nhiều nút gửi.
hrvoj3e

Có vẻ như họ đã xóa nội dung đó khỏi trang yếu tố đầu vào. Thông tin tương tự về thuộc tính formtarget có thể được tìm thấy trên trang phần tử nút: developer.mozilla.org/en-US/docs/Web/HTML/Euity/
Kẻ

3

Mã bạn đã đưa ra, cần phải được sửa chữa. Trong thẻ biểu mẫu, bạn phải kèm theo giá trị thuộc tính onClick trong dấu ngoặc kép:

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

Bạn cũng cần lưu ý rằng tham số đầu tiên window.opencũng nên được đính kèm bằng dấu ngoặc kép.


2

Tôi thường sử dụng một đoạn mã jQuery nhỏ trên toàn cầu để mở bất kỳ liên kết bên ngoài nào trong một tab / cửa sổ mới. Tôi đã thêm bộ chọn cho một biểu mẫu cho trang web của riêng tôi và nó hoạt động tốt cho đến nay:

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

0

Tôi tin rằng jquery này làm việc cho bạn tốt xin vui lòng kiểm tra một mã dưới đây.

điều này sẽ làm cho hành động gửi của bạn hoạt động và mở một liên kết trong tab mới cho dù bạn muốn mở lại url hành động hay một liên kết mới

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

Mã này hoạt động cho tôi hoàn hảo ..


-4

window.open không hoạt động trên tất cả các trình duyệt, Google nó và bạn sẽ tìm ra cách phát hiện loại hộp thoại chính xác.

Ngoài ra, di chuyển cuộc gọi onclick sang nút đầu vào để nó chỉ kích hoạt khi người dùng gửi.


1
onclick trên nút đầu vào là sai. Sau đó, nếu người dùng nhấp vào nó, nhưng di chuyển đi trước khi phát hành, nó vẫn sẽ kích hoạt.
Matthew Flaschen

-12

Tôi cũng tìm thấy một giải pháp cho vấn đề này. Trang này đã giúp tôi ngày hôm nay vì vậy, tôi cũng đang đăng lại ở đây.

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

Mã trên là mã cho một nút. Bạn nhấn nút và nó sẽ vẽ lại màn hình hiện tại từ khi mua đến khi được chấp thuận trước. Đồng thời, nó sẽ mở một cửa sổ mới và trao cho cửa sổ mới đó cho PayPal.


5
OP cho biết họ chưa quen với mã - IMO đăng toàn bộ tải mã (được định dạng khủng khiếp) liên quan đến các nút Paypal sẽ không giúp được họ
Mike
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.