Remove url parameter with Ajax when checkbox is unchecked

ぃ、小莉子 提交于 2020-12-15 05:53:56

问题


So basically, I have this code taken from Advanced Custom fields Ressource center:

<script type="text/javascript">
(function($) {
    
    // change
    $('#archive-filters').on('change', 'input[type="checkbox"]', function(){

        // vars
        var url = '<?php echo '//' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>';
            args = {};
            
        
        // loop over filters
        $('#archive-filters .filter').each(function(){
            
            // vars
            var filter = $(this).data('filter'),
                vals = [];
            
            
            
            
            // find checked inputs
            $(this).find('input:checked').each(function(){
    
                vals.push( $(this).val() );
            });
            
            
            // append to args
            args[ filter ] = vals.join(',');
            
        });
        
        
        // update url
        if (url.indexOf('?') > -1){
            //code
        url += '&';
        }
        else {  
        url += '?';
        }
        
        
        // loop over args
        $.each(args, function( name, value ){
            if (value==='') {
                url += '';
            }else {
                url += name + '=' + value + '&';
            }
            
        });
        
        
        // remove last &
        url = url.slice(0, -1);
        
        // reload page
        window.location.replace( url );
        

    });

})(jQuery);
</script>

When I check a checkbox in #archive-filters div, it reloads the page with the new parameter in url.

Now I Would like to remove the parameter when the checkbox is unchecked but can't find How.

How can I remove the url parameter associated to the checkbox unchecked?


回答1:


The easiest way to handle all of this is with the URL API and URLSearchParams

I'm not 100% clear what the search params look like for that WP plugin so have used some very simple ones and am only using their keys to match checkbox names .

Also not sure if the active ones are checked or not on page load but show how to do it here if they are not

Since the URL object can be updated as many times as you need it may also offer you an alternative to reloading every time checkbox is checked and allow users to make multiple selections before reloading

const url = 'http://example.com?foo=true&bar=true' // 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){
        params.append(this.name, 'true')
    }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"/></label> 
<label>Bar <input type="checkbox" name="bar"/></label>
<label>Zzz <input type="checkbox" name="zzz"/></label>



回答2:


Very good code, I used it to add or remove a DEBUG flag in the URL.

To have the URL like:

http://www.example.com/?foo=1&bar=2&debug=1

Here is my modified version:

<label>
    <input type="checkbox" id="debug" value="1" <?= ($_GET['debug'] == '1' ? 'checked' : '') ?> />
    Debug
</label>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script>
$('#debug').click(function(e)
{
    const url_obj = new URL(location.href);
    const params = url_obj.searchParams;

    // Append when checkbox gets checked and delete when unchecked
    if (this.checked) {
        params.append(this.id, '1');
    } else {
        params.delete(this.id);
    }

    window.location = url_obj.href;
});
</script>


来源:https://stackoverflow.com/questions/63604553/remove-url-parameter-with-ajax-when-checkbox-is-unchecked

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!