Thanks to @charlietfl I'm able to add/remove parameters to URL according to the checkboxes choices.
Now I want to have multiple values for a specific URL parameter if multiple checkboxes are checked.
I adapted this previous answer snippet to reflect where I'm stuck.
When selecting multiple checkboxes the parameter and value are added whereas I need to only add the value.
How can I get http://example.com/?param=foo,bar
instead of http://example.com/?param=foo¶m=bar
when I Check foo
and bar
?
const url = 'http://example.com' // demo version
// const url = location.href - live version
const urlObj = new URL(url);
const params = urlObj.searchParams
const $checks = $(':checkbox')
// on page load check the ones that exist un url
params.forEach((val, key) => $checks.filter('[name="' + key + '"]').prop('checked', true));
$checks.change(function(){
// append when checkbox gets checked and delete when unchecked
if(this.checked){
//here I check if there is already the parameter in url
if (url.indexOf(this.value) > -1) {
//and try to append only this name with a comma as separator from previous one
params.append(',',this.name )
} else {
params.append(this.value,this.name )
}
}else{
params.delete(this.name);
}
// do your page load with location.href = urlObj.href
console.clear()
console.log(urlObj.href);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label>Foo <input type="checkbox" name="foo" value="param"/></label>
<label>Bar <input type="checkbox" name="bar" value="param"/></label>
<label>Zzz <input type="checkbox" name="zzz" value="param"/></label>