FAPIを使用して、Ajaxを開始する前にJavaScript関数を追加するにはどうすればよいですか?
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Upload',
'#ajax' => array(
'callback' => 'ajax_submit_key_dump'
),
);
#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を追加できます。送信ボタンのクリックハンドラーで必要な処理を実行できます。
この方法でアタッチされた「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';
カスタムモジュールを作成しました。 hook_form_alter() を使用しています。JavaScriptファイルをコンテンツタイプフォームの1つに追加しました。詳細が必要な場合は、それを言ってください。