前提
多数の検索条件を持つ検索機能を作成しています。
現状では全ての検索条件をページ上のチェックボックス等で実装しているところ、
一部の検索条件についてはその項目が選択された際に検索内容物をモーダル画面に表示し、
そのモーダル画面内の検索ボタン押下で検索できる機能に変更したいと考えています。
(例)
現状、「都道府県」「市町村」の検索機能は、ページ上のドロップダウン内にチェックボックスを設ける形としています。
新機能では、「都道府県」をクリックした際に都道府県一覧のモーダルを表示させ、
チェックされた都道府県に応じて別タブで当該都道府県の市区町村をjsで動的に表示させる予定です。
実現したいこと
モーダルを表示させた際、そしてモーダル内の検索ボタンを押下した際に、それまでの検索条件を全て引き継ぐことが最終的に実現したいことです。
ただ現状、検索条件によって、配列で渡しているキーとそうでないキーが混在しています。
上記の例では、都道府県と市区町村は配列で渡しているため、以下のコードで難なく取得できているのですが、
他のキーの値も配列で取得する形となってしまいます。
元々、サイト上で配列で渡していないキーについて、配列でない形で渡すにはどのように書き換えればよいでしょうか。
わかりにくい点がございましたら、何でもお尋ねください。
よろしくお願いいたします。
発生している問題・エラーメッセージ
http://localhost:3000/index?prefecture%5B%5D=1&prefecture%5B%5D=3&hogekey=FUGA&city%5B%5D=202&city%5B%5D=165
上記のURLのページからモーダルを表示させ、下記のJSの挙動を通じて再度検索すると、
http://localhost:3000/index?prefecture%5B%5D=1&prefecture%5B%5D=3&hogekey%5B%5D=FUGA&city%5B%5D=202&city%5B%5D=165
となってしまう(hogekeyについてはhogekey=FUGAのままにしたい)
該当のソースコード
Javascript
1//上記のようなURLからパラメータを取得 2 var paramsString = location.search; 3 var searchParams = new URLSearchParams(paramsString); 4 var paramsPrefecture = searchParams.getAll("prefecture[]"); 5 var paramsCity = searchParams.getAll("city[]"); 6 var paramsHoge = searchParams.getAll("hogekey"); 7 8//パラメータを定義 9 var reqParams = { 10 prefecture: [], 11 city: [], 12 hogekey: paramsHoge //ここが問題 13 } 14 15//取得したパラメータを元に、表示したモーダル内の都道府県をあらかじめチェックし、パラメータに追加 16 $(paramsPrefecture).each(function(index, val){ 17 $(`input.prefecture[value=${val}]`).each(function() { 18 $(this).prop("checked", true); 19 }); 20 }); 21 22 var ids = []; 23 $('input.prefecture').each(function() { 24 if (this.checked) { 25 ids.push($(this).attr("value")); 26 } 27 }); 28 reqParams.prefecture = ids; 29 30//検索ボタン押下時 31 $('.search-button').click(function () { 32 var query = $.param({ 33 prefecture: reqParams.prefecture, 34 city: reqParams.city, 35 hogekey: reqParams.hogekey 36 }); 37 location.href = "/index?" + query; 38 }); 39 40
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。