How can I update the parameters of URL(window.history) based on multi groups of check-boxes if any of group been checked?
Like (if only the make selected)
www.mydomain/filters?make=toyota,honda
or if make and model is selected
www.mydomain/filters?make=toyota,honda&model=crv,cx5
$(document).ready(function() {
$("input:checkbox[name='make']").change(function() {
var makechecks = [];
$("input[type='checkbox']:checked").each(function() {
makechecks[makechecks.length] = this.value;
});
console.log( makechecks.join() );
});
$("input:checkbox[name='model']").change(function() {
var modelchecks = [];
$("input[type='checkbox']:checked").each(function() {
modelchecks[modelchecks.length] = this.value;
});
console.log( modelchecks.join() );
});
$("input:checkbox[name='year']").change(function() {
var yearchecks = [];
$("input[type='checkbox']:checked").each(function() {
yearchecks[yearchecks.length] = this.value;
});
console.log( yearchecks.join() );
});
function UpdateURL(){
window.history.pushState( {} , '', '');
}
});<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="make">
<p>Toyota :<input type="checkbox" name="make" value="toyota"></p>
<p>Honda : <input type="checkbox" name="make" value="honda"></p>
<p>Mazda : <input type="checkbox" name="make" value="mazda"></p>
</div>
<div id="model">
<p>CRV :<input type="checkbox" name="model" value="crv"></p>
<p>RAV4 :<input type="checkbox" name="model" value="rav4"></p>
<p>CX5 :<input type="checkbox" name="model" value="cx5"></p>
</div>
<div id="year">
<p>2020 :<input type="checkbox" name="year" value="2020"></p>
<p>2019 :<input type="checkbox" name="year" value="2019"></p>
<p>2018 :<input type="checkbox" name="year" value="2018"></p>
</div>Advertisement
Answer
Something like this?
const createURL = () => {
let urlSearch = new URLSearchParams()
let make = $("[name=make]:checked" ).map((_,chk) => chk.value).get()
let model = $("[name=model]:checked").map((_,chk) => chk.value).get()
let year = $("[name=year]:checked" ).map((_,chk) => chk.value).get()
if (make.length > 0) urlSearch.set("make", make.join(","))
if (model.length > 0) urlSearch.set("model", model.join(","))
if (year.length > 0) urlSearch.set("year", year.join(","))
const srch = urlSearch.toString();
console.log(srch);
// history.pushState({}, "Results for `Cars`", srch ? "?"+srch : "");
};
$(function() {
$("input:checkbox").on("change", createURL)
});<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="make"> <p>Toyota :<input type="checkbox" name="make" value="toyota"></p> <p>Honda : <input type="checkbox" name="make" value="honda"></p> <p>Mazda : <input type="checkbox" name="make" value="mazda"></p> </div> <div id="model"> <p>CRV :<input type="checkbox" name="model" value="crv"></p> <p>RAV4 :<input type="checkbox" name="model" value="rav4"></p> <p>CX5 :<input type="checkbox" name="model" value="cx5"></p> </div> <div id="year"> <p>2020 :<input type="checkbox" name="year" value="2020"></p> <p>2019 :<input type="checkbox" name="year" value="2019"></p> <p>2018 :<input type="checkbox" name="year" value="2018"></p> </div>