私は advanced poll sモジュールをDrupal 7.で使用します。7。ラジオボタンが選択されるとすぐに(なしで)投票が送信されるように動作を変更しようとしていますVote)を押す必要があります。
モジュールはajaxコールバックを使用しています:
$form['submit'] = array(
'#type' => 'submit',
'#ajax' => array(
'callback' => 'advpoll_form_submit',
'wrapper' => 'advpoll-form-' . $values->nid,
'name' => 'submit1',
),
'#id' => 'edit-submit-advpoll-' . $values->nid,
'#value' => t('Vote'),
);
このコールバックをラジオボタンで呼び出すにはどうすればよいですか?
時間は本当の要素なので、私はすばやく汚れたjavascript/jQueryソリューションに満足しています。
私はjQueryソリューションを試しました:
$('input[type="radio"]').change(function() {
$('#advpoll-form-296').trigger('click');
});
ただし、これは期待どおりのアクションを呼び出していません。
ページをリロードしたくないので、submit()を呼び出すことができません。
.moduleファイルのajax配列にクリックイベントを追加することで、元のコードを起動できました。
advpoll.module:
function advpoll_choice_form($form, &$form_state, $values) {
$form['submit'] = array(
'#type' => 'submit',
'#ajax' => array(
'callback' => 'advpoll_form_submit',
'wrapper' => 'advpoll-form-' . $values->nid,
'name' => 'submit1',
'event' => 'click', //Added click event
),
'#id' => 'edit-submit-advpoll-' . $values->nid,
'#value' => t('Vote'),
);
モジュール内のコードをオーバーライドしないでください。これをテーマフックに入れるにはどうすればいいですか?
これはそれを行うはずです:
_$(function() {
$('input[type="radio"]').on('change', function() {
$(this).parents('form').submit();
});
});
_
$('input[type="radio"]')
のセレクターを、使用しているフォームのスコープに修飾したい場合があります。そうでない場合、これを多くの異なるページでアクセスされるJavaScriptファイルに含めると、間違いなく問題が発生します。 !
これが投稿されてからしばらく経ちましたが、この回答がとにかく役立つことを願っています
それを行うために見つけた簡単な方法(私はadvpollモジュールも使用しています)は、hook_form_alter
を使用して、同じAJAXハンドラーをオプションドロップダウンに追加することです
だから、私のカスタムモジュールで:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
// The submit form has ID advpoll_choice_form
if ($form_id == 'advpoll_choice_form') {
foreach ($form as $key => &$value) {
// It seems that the radio buttons are under an array labelled 'choice_X'
// where X is the number of options you have, so this just checks
// it's doing it to the correct one
if (substr($key, 0, 7) == 'choice_') {
// Apply the same AJAX handler the submit button has to the radio buttons
$value['#ajax'] = $form['submit']['#ajax'];
}
}
}
}
これが将来の誰かを助けることを願っています