選択オプションに基づいてチェックボックスオプションを置き換えるカスタムajaxコールバックを取得しました。
ここで、checkboxlistが更新された後、それらのチェックボックスでjquery関数を実行する必要があります。
コールバックの完了後、チェックボックスリストが更新された後で、このカスタムjquery関数を実行するにはどうすればよいですか?.
フォーム要素:
$widget['select_box'] = array(
'#type' => 'select',
'#title' => 'Select bussen',
'#options' => $options,
'#validated' => TRUE,
'#default_value' => '_none',
'#attributes' => array('class' => array('select-province')),
//The callback
'#ajax' => array(
'callback' => 'ajax_select_callback',
// 'wrapper' is the HTML id of the page element that will be replaced.
'wrapper' => 'replace_select_div',
),
);
//Form element wich get updated
$widget['select_box_2'] = array(
'#type' => 'checkboxes',
'#title' => 'Select bussen',
'#options' => ...,
'#prefix' => '<div id="replace_select_div">',
'#suffix' => '</div>',
);
Ajaxコールバック関数:
function ajax_select_callback($form, $form_state) {
// The form has already been submitted and updated. We can return the replaced
// item as it is.
return $form['line_item_fields']['field_bussen_select']['und'][0]['select_box_2']
}
チェックボックスで実行するjquery関数:
jQuery("input[type='checkbox']").change(function () {
jQuery(this).parent().siblings('ul')
.find("input[type='checkbox']")
.prop('checked', this.checked);
});
: https://drupal.org/node/17121 で答えが見つかると思います。
セクション:JavaScript AJAX form
「jQueryをDrupal.behaviorsにアタッチします。これにより、新しいDOM要素が挿入されたときにいつでも実行できるようになります。ビューでAJAXを使用している場合、ページのセクションが再読み込みされるたびに、jQueryをリロード/実行します。」
私はもうそれを必要としないので、それをテストしませんでした:)、しかしそれでも知っておくと良いです!
Drupal.behavioursでJS関数をラップします。セクションの再読み込み後に機能します
(function ($) {
Drupal.behaviors.myModuleBehaviours = {
attach: function (context, settings) {
$("input[type='checkbox']").change(function () {
$(this).parent().siblings('ul').find("input[type='checkbox']").prop('checked', this.checked);
});
}
}
})(jQuery);
ajax_commands を操作する
あなたのコールバックは:
function ajax_select_callback($form, &$form_state) {
$commands = array();
// Replace the form element.
$commands[] = ajax_command_replace('#edit-select_box_2-SELECTOR', render($form['select_box_2']), array());
// Invoke any JavaScript func
$commands[] = ajax_command_invoke(NULL, 'your_custom_js', array());
// more commands...
return array(
'#type' => 'ajax',
'#commands' => $commands,
);
}
そしてJSでは:
jQuery.fn.your_custom_js = function () {
....
};
これはテストされておらず、エレガントな方法です。
Drupal 7のajaxイベントの後にJavaScript関数を呼び出すための、わかりやすくてわかりやすいチュートリアルを以下に示します。
http://www.jaypan.com/tutorial/calling-function-after-ajax-event-drupal-7