web-dev-qa-db-ja.com

AJAXフォームが送信されたときにJavaScriptが再度実行されないようにする方法

一部の検索フィルターを非表示にするJavaScriptファイルにこのコードがあります...

$('#views-exposed-form-faceted-search-page .form-type-select').once().hide();

ユーザーは#advanced-searchリンクをクリックしてフィルターの表示を切り替えることができます...

$('#views-exposed-form-faceted-search-page #advanced-search a').once('advanced_search').click(function(){
        $('#views-exposed-form-faceted-search-page .form-type-select').toggle();
});

機能しますが、AJAX=フォームが送信されると、hide()関数が再度実行され、.form-type-select要素が非表示になります。2回目に非表示にならないようにするにはどうすればよいですか? ?ページが最初に読み込まれたときにコードで選択を非表示にしたいだけです。

2
arnoldbird

Ajaxが非表示にしているこの部分をリロードすると、once()が設定したマーカーが、表示/非表示ステータスも上書きされます。次に、Ajaxから返されるように表示/非表示のステータスを送信するか、Ajaxで完全に制御できるように表示/非表示のAjaxフォーム要素を作成する、別の方法が必要です。

これがAjaxラッパーの外にある場合は、JavaScriptでこれを実行できますが、contextにjQueryセレクターを適用します。

$('#views-exposed-form-faceted-search-page .form-type-select', context).once('search-hide').hide();

https://www.drupal.org/docs/8/api/javascript-api/javascript-api-overview を参照してください

2
4k4