次のようなメソッドGETを使用した単純なフォームがあります...
function MYMODULE_form($form, &$form_state) {
$form['#method'] = 'get';
$params = drupal_get_query_parameters();
$form['cat'] = array(
'#type' => 'select',
'#title' => t('Categories'),
'#options' => $categories,
'#default_value' => isset($params['cat']) ? $params['cat'] : '',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
}
GETは、デフォルトの送信機能と検証機能を実際にバイパスします。 「カテゴリ」フィールドの値が変更されたときに、送信ボタンなしでこのフォームを送信したい。
function MYMODULE_form($form, &$form_state) {
$form['#method'] = 'get';
$params = drupal_get_query_parameters();
$form['cat'] = array(
'#type' => 'select',
'#title' => t('Categories'),
'#options' => $categories,
'#default_value' => isset($params['cat']) ? $params['cat'] : '',
'#ajax' => array(
'callback' => 'MYMODULE_form_submit',
),
);
}
どうすればよいですか?
これは、属性を使用してこれを行うことができた方法です...
'#attributes' => array('onchange' => 'this.form.submit();'),
だからそれは単純だった...
function MYMODULE_form($form, &$form_state) {
$form['#method'] = 'get';
$params = drupal_get_query_parameters();
$form['cat'] = array(
'#type' => 'select',
'#title' => t('Categories'),
'#options' => $categories,
'#default_value' => isset($params['cat']) ? $params['cat'] : '',
'#attributes' => array('onchange' => 'this.form.submit();'),
);
}
これで、フィールドが変更されたときにフォームを送信できます。
このような?
css:
MY_FORM_SELECTOR input[type="submit"] {display:none;}
#ajax
プロパティなし:
JS:
$('CAT_SELECT').change(function() {
$(this).closest('form').submit();
});
または、送信フィールドの#ajax
プロパティを使用:
$('CAT_SELECT').change(function() {
$(this).closest('form').find('input[type=submit]').click();
});
UPDATE:
scripts[] = JSFILENAME.js
を追加しますコード:
(function ($) {
Drupal.behaviors.SomeUniqueName = {
attach: function (context, settings) {
$('CAT_SELECT').change(function() {
$(this).closest('form').submit();
});
}
};
})(jQuery);
キャッシュをクリアします。それだけです。
ps:// AJAXでフォームを送信する場合、 この要点 が役立ちます