web-dev-qa-db-ja.com

Ajaxが始まる前にJavaScript関数を追加する方法

FAPIを使用して、Ajaxを開始する前にJavaScript関数を追加するにはどうすればよいですか?

$form['submit'] = array(    
  '#type' => 'submit',
  '#value' => 'Upload',
  '#ajax' => array(
    'callback' => 'ajax_submit_key_dump'
  ),
);
3
user871

#after_buildプロパティを使用して、JavaScriptファイルをフォームに追加できます。

$form['#after_build'] = array('my_js_add_function');

....

function my_js_add_function($form, &$form_state) {
  drupal_add_js(...);
  return $form;
}

フォーム定義にjsを追加する代わりに#after_buildを使用すると、フォームがキャッシュから取得された場合でも、JSが確実に追加されます。

JavaScriptファイルでは、好きなjQueryを追加できます。送信ボタンのクリックハンドラーで必要な処理を実行できます。

0
googletorp

この方法でアタッチされた「beforeSubmit」ハンドラは、Ajaxリクエストの直前に実行されます。

(function ($) {
  Drupal.behaviors.ReplaceWithAnyTextYouWant = {
    attach: function (context, settings) {
      // 'edit-submit' is the element ID where you execute the #ajax.
      Drupal.ajax['edit-submit'].options.beforeSubmit = function(form_values, element_settings, options) {
      // If cancel is clicked, do not continue submitting.
      if (!confirm('Are you sure you want to continue?')) {
          return false;
      }
    }
  };
})(jQuery);

ユーザー入力の送信前検証を実行し、falseを返すことでフォーム送信をキャンセルすることもできます

これが 良い例 です

'edit-submit'-'#ajax'設定の送信ボタンの要素html IDです。 'edit-'接頭辞は、トリガー要素(この場合は送信ボタン)を含むフォーム配列アイテムのキーに添付されます。 $ form ['my-submit'] = array(...)の場合、結果のボタンのHTML IDは「edit-my-submit」になります。

上記のコードを含むJSファイルは、フォームコンストラクターでフォームに添付できます。

$form['#attached']['js'][] = drupal_get_path('module', 'your_module') . '/js/file.js';
6

カスタムモジュールを作成しました。 hook_form_alter() を使用しています。JavaScriptファイルをコンテンツタイプフォームの1つに追加しました。詳細が必要な場合は、それを言ってください。

0
user709