drupal > ビュー > 公開フィルター > 変更時に送信
-
18-09-2019 - |
質問
単一の公開フィルター (選択) を含むビューがあります。ユーザーが「適用」をクリックすると、ajax を使用して再入力されます。それをクリックする必要がなく、選択が変更されたときに再入力するだけで済むようにしたいと思います。多かれ少なかれ次のような JS が必要になると思います (ただし、これは完全に機能しているようには見えません)。
$('#edit-tid').change(function(){
$('#views-exposed-form-MYVIEW-page-1').submit();
});
まず、それで済むと思いますが、提出されません。理由を知っている人はいますか?
次に、そのコードを挿入する最良の方法は何でしょうか?簡単なので View フッターを使用しようと考えていますが、他に良いアイデアはありますか?
アップデート:上記のコード は 動作しています(ビューフッター経由で挿入されています)が、初回のみです。選択はajax呼び出しによって上書きされていると思いますが、動作は再アタッチ(または何か)されていません。ふーむ...
更新 #2:話を簡単にするために、ajax は省略します。
解決
このコードを ajax 呼び出し後に再アタッチするには、最初に Drupal.behaviors 経由でアタッチする必要があります。このようなもの:
Drupal.behaviors.myCustomModule = function(context) {
$('#edit-tid', context).change(function(){
$('#views-exposed-form-MYVIEW-page-1').submit();
});
}
context 引数がセレクターに渡されることに注意してください。Drupal.behaviors は、Ajax 経由でロードされた新しいコンテンツで再度呼び出される必要があります。
アップデート:ビューフッター経由でjsを挿入していることに気づきませんでした。上記は引き続き機能するはずですが、他の動作をオーバーライドしないように「myCustomModule」を一意の識別子に置き換えるだけです。
他のヒント
この機能は特に設定しなくても機能すると思います (少なくとも Drupal 7 では)。ビュー以下を編集します露出した形状 選ぶ
Exposed form style -> Settings
それからオプションがあります
Autosubmit
ここで、「要素が変更されたらフォームを自動的に送信する」かどうかを選択できます。オプションを使用する可能性もあります
Hide submit button
これについては、「JavaScript が有効な場合は送信ボタンを非表示にする」で説明されています。
@pradeep:あなたは http://www.group42.ca/見る(テーマのビューテンプレートに挿入できtheming_views_2_the_basics の)ビューの。 (申し訳ありませんが、フォーラムのUIに応じてコメントとしてこれを書くことができませんでした)。
あなたが選択オプションを変更するときに、あなたの暴露ビューで動作するようにAJAXが必要な場合は、
Drupal.behaviors.myCustomModule = {
attach: function (context, settings) {
$('select[data-drupal-selector="edit-YOUR-FIELD"]', context).change(function(){
$('#views-exposed-form-YOUR-VIEW-block-1 input.form-submit').trigger('click');
});
}
};