プログラムで(jQueryを使用して)DrupalフォームのAJAX動作でボタンのクリックをトリガーしようとしていますが、今のところjQuery('#edit-submit').click()
何もしません。
上の実際のマウスクリック意図したようにそのボタンが動作します。それを機能させる方法はありますか?
プログラムで(jQueryを使用して)DrupalフォームのAJAX動作でボタンのクリックをトリガーしようとしていますが、今のところjQuery('#edit-submit').click()
何もしません。
上の実際のマウスクリック意図したようにそのボタンが動作します。それを機能させる方法はありますか?
回答:
jQuery('#edit-submit').mousedown()
-明らかに大きな違いがあります。
mousedown()
は、click()
イベントの「最初の部分」であり、mouseup()
発生すると完了します。リンクをクリックしてから、リンクの領域外でマウスを放しても、click()
通常はリンクが起動せず、リンクはたどられません。おそらくAJAX呼び出しを防ぐmouseup()
解雇されるが、これは単なる推測です...
実際、推測する必要はありません。
Drupalの動作を使用する必要があります
Drupal.behaviors.yourFunctionName = {
attach:function (context, settings) {
// Your code goes here....
}
}
これにより、設定のajaxプロパティにアクセスできます。
Drupal.behaviors.yourFunctionName = {
attach:function (context, settings) {
console.log(settings.ajax);
}
}
構成に応じて、コールバック関数の名前、セレクターのID、トリガーイベントの名前などのさまざまなプロパティを持つトリガー要素のリストが表示されます。
その後、関連情報を使用してイベントをトリガーできます。
// $(selector).trigger(eventName);
// for example...
$('#edit-product-id-15', context ).trigger('change');
次のようなajax送信を作成します。
$form['button'] = array(
'#type' => 'button',
'#value' => 'Click',
'#ajax' => array(
'callback' => '_kf_reading_user_points',
'wrapper' => 'reading-user-points',
'method' => 'replace',
'event' => 'click',
),
);
function _kf_reading_user_points(&$form, &$form_state) {
// Something within the callback function.
}
その後、jquery .click()イベントはdrupal ajaxフォームで機能します。
.trigger()
jQueryメソッドを使用することもできます。$('#element').trigger('click');
私の場合、上記の推奨される解決策はうまくいきませんでしたが、.mousedown()に言及することで、私にとってはうまくいく次のアイデアが生まれました(Drupal 7):
$('#custom-submit-button').click(function() {
$('#ajax-submit-button').trigger('mousedown');
});
「理由」に関する役立つ背景情報は、#ajax_preventの Form APIリファレンスにあります。
Better Exposed Filtersモジュールを見ると、彼らは$(。ctools-auto-submit-click ')を見つけてクリックをトリガーすることでAJAXフォームを送信します。
<?php
// ... near line 190 of better_exposed_filters.js
// Click the auto submit button.
$(this).parents('form').find('.ctools-auto-submit-click').click();
?>