html
1 <a href="?gender=male&minAge=20&maxAge=25" id="search">search</a>
性別と年齢の幅をユーザーが指定すると、それに応じてリンク先のURLにクエリパラメータが付与される機能を実装したいです。
上に挙げたリンクはクエリパラメータが静的な状態になっていますが、これをinputの入力内容に応じて動的に変更する良い方法はあるでしょうか?
###追記(実装例1)
次のように実装することができました。回答して下さった皆様ありがとうございました。
HTML
1 <a href="" id="search">search</a> 2 <input type="text" name="gender" class="inp"><br> 3 <input type="text" name="minAge" class="inp"><br> 4 <input type="text" name="maxAge" class="inp"><br>
JavaScript
1const searchButton = document.getElementById('search'); 2 3searchButton.onclick = () => { 4 const inputs = document.querySelectorAll('.inp'); 5 const keyval = [...inputs].map((e) => [e.name, e.value]); 6 const searchParams = new URLSearchParams(keyval); 7 const href = `?${searchParams.toString()}`; 8 searchButton.setAttribute('href', href); 9}; 10
###追記(実装例2)
性別の選択をラジオボタンに変更した場合
HTML
1<input type="radio" name="gender" value="male" class="radioInp"> 2<label for="inq1">男性</label> 3<input type="radio" name="gender" value="famale" class="radioInp"> 4<label for="inq2">女性</label> 5<input type="radio" name="gender" value="" class="radioInp"> 6<label for="inq3">指定なし</label><br> 7<label>minAge</label> <input type="text" name="minAge" class="inp"><br> 8<label>maxAge</label> <input type="text" name="maxAge" class="inp"><br> 9<a href="" id="search">search</a>
JavaScript
1const searchButton = document.getElementById('search'); 2 3searchButton.onclick = () => { 4 const inputs = document.querySelectorAll('.inp'); 5 const keyval1 = [...inputs].map((e) => [e.name, e.value]); 6 7 const radioInputs = document.querySelectorAll('.radioInp'); 8 const keyval2 = [...radioInputs].filter((e) => e.checked).map((e) => [e.name, e.value]); 9 10 const keyval = keyval1.concat(keyval2); 11 12 const searchParams = new URLSearchParams(keyval); 13 const href = `?${searchParams.toString()}`; 14 searchButton.setAttribute('href', href); 15}; 16
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/17 12:21
2020/08/17 12:25
2020/08/17 13:42