web-dev-qa-db-ja.com

新しいブラウザタブでカスタムフォームを送信する

Drupal 6にカスタムフォームがあり、フォーム送信を新しいウィンドウで開くことを除いて、すべてが完全に機能します。
drupal 6のフォームAPIに従って次のコードを使用しようとしましたが、機能しません

 $ form ['save_and_print'] = array(
 '#type' => 'submit'、
 '#value' => t( 'Save and Print')、 
 '#attributes' => array( 'target' => '_blank')、//これは機能しません
); 

誰かがこれを達成できましたか?助けてください!

2
NewBie

フォームタグ自体にtarget属性を設定する必要があります。

$form['#attributes']['target'] = '_blank';

このコードをフォーム関数のどこかに配置します。

更新:

この機能を特定のボタンに適用するには、注意が必要です。

$form['save_and_print'] = array(
      '#type' => 'submit',
      '#value' => t('Save and Print'),
      '#attributes' => array('onclick' => 'this.form.target="_blank";return true;'),
);

これをクリックすると、親フォーム要素のtarget属性が_blankに設定され、これを押すと新しいタブが開きます。ボタンを1回クリックし、同じフォームの他のボタンをクリックすると、前のonclickイベントがtarget属性を_blankに設定したため、新しいタブでも開きます。

回避策として、このonclickイベントをすべての送信に設定する必要があります。

同じページ/タブでフォームを送信するには:

$form['save'] = array(
      '#type' => 'submit',
      '#value' => t('Save'),
      '#attributes' => array('onclick' => 'this.form.target="_self";return true;'),
);

新しいタブで送信するには:

$form['save_and_print'] = array(
      '#type' => 'submit',
      '#value' => t('Save and Print'),
      '#attributes' => array('onclick' => 'this.form.target="_blank";return true;'),
);

デモ

7
AyeshK