153

送信フォームがあり、ユーザーがフォームを送信したときに新しいウィンドウを開いて、分析で追跡できるようにしたいと考えています。

私が使用しているコードは次のとおりです。

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

9 に答える 9

314

Javascript は必要ありません。formtarget="_blank"タグに属性を追加するだけです。

<form target="_blank" action="http://example.com"
      method="post" id="mc-embedded-subscribe-form"
      name="mc-embedded-subscribe-form" class="validate"
>
于 2009-05-22T07:34:11.103 に答える
13

form の属性と同様の効果を得るには、またはの属性をtarget使用することもできます。formtargetinput[type="submit]"button[type="submit"]

MDNから:

...この属性は、フォームの送信後に受け取った応答を表示する場所を示す名前またはキーワードです。これは、ブラウジング コンテキスト (タブ、ウィンドウ、インライン フレームなど) の名前またはキーワードです。この属性が指定されている場合、要素のフォーム所有者の target 属性をオーバーライドします。次のキーワードには特別な意味があります。

  • _self: 現在のものと同じブラウジング コンテキストに応答を読み込みます。この値は、属性が指定されていない場合のデフォルトです。
  • _blank: 応答を新しい名前のないブラウジング コンテキストに読み込みます。
  • _parent: 現在の閲覧コンテキストの親閲覧コンテキストに応答を読み込みます。親がない場合、このオプションは _self と同じように動作します。
  • _top: 応答を最上位のブラウジング コンテキスト (つまり、現在のブラウジング コンテキストの祖先であり、親を持たないブラウジング コンテキスト) に読み込みます。親がない場合、このオプションは _self と同じように動作します。
于 2016-03-18T16:37:32.903 に答える
9

onclickそのアクションを関連付けるのに最適なイベントではない可能性があります。フォーム内のどこかをクリックすると、いつでもウィンドウが開きます。

<form action="..." ...
    onsubmit="window.open('google.html', '_blank', 'scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');return true;">
于 2009-05-22T14:37:40.250 に答える
4

あなたが与えたコードを修正する必要があります。フォーム タグでは、onClick 属性値を二重引用符で囲む必要があります。

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

の最初のパラメータwindow.openも引用符で囲む必要があることに注意する必要があります。

于 2009-05-22T07:43:43.063 に答える
2

私は通常、小さな jQuery スニペットをグローバルに使用して、外部リンクを新しいタブ/ウィンドウで開きます。自分のサイトのフォームにセレクターを追加しましたが、今のところ問題なく動作しています。

// URL target
    $('a[href*="//"]:not([href*="'+ location.hostname +'"]),form[action*="//"]:not([href*="'+ location.hostname +'"]').attr('target','_blank');
于 2014-11-27T16:20:22.520 に答える
-4

window.openすべてのブラウザーで機能するとは限りません。Google で検索すると、正しいダイアログ タイプを検出する方法が見つかります。

また、onclick 呼び出しを入力ボタンに移動して、ユーザーが送信したときにのみ起動するようにします。

于 2009-05-22T07:34:11.587 に答える
-12

これに対する解決策も見つけました。今日はこのページが役に立ったので、こちらにも再投稿します。

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

上記のコードは、1 つのボタンのコードです。ボタンを押すと、現在の画面が購入から事前承認に再描画されます。同時に新しいウィンドウを開き、その新しいウィンドウを PayPal に渡します。

于 2013-09-12T04:29:09.947 に答える