复选框 - 选中取消选中功能不起作用


checkbox - Check uncheck functionality is not working

我的情况:

我正在开发一个购物车应用程序,它包含一些过滤器:

  1. 按颜色筛选(复选框(

  2. 按样式筛选(复选框(

选择一些颜色后,我的URL变成这样:

http://example.com/women/try.php?color=10,11,12,13
<小时 />

我的问题 :

  1. 取消选中某些颜色后,相关参数不会从 url 中清除。

  2. 另外,当我选择一些样式时,我希望网址是这样的:

    http://example.com/women/try.php?color=10,11,12,13&style=1,2,3

请帮助我如何实现此功能。

<小时 />

我的代码 :

<?php
    $colors = $_GET['color'];
    $sel_colors = explode(',', $colors); 
    foreach($sel_colors as $k=>$v) {
        $c['check'][$v] = $v;
    }
    for($i=10;$i<=14;$i++) { ?>
        <input type="checkbox" name="color[]" value="<?php echo $i; ?>"  <?php echo $check_value = ($c['check'][$i]) ? 'checked' : '0'; ?> >
        <label>Color #<?php echo $i.'--'.$check_value; ?></label><?php
    }
?><br/><br/><br/>
<input type="checkbox" name="type" value="1" >
<label>style #1</label>
<input type="checkbox" name="type" value="2" >
<label>style #2</label>
<input type="checkbox" name="type" value="3" >
<label>style #3</label>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js" ></script>
<script type="text/javascript">
    var baseUrl = 'http://website/women/try.php?color=';
    $(document).ready(function () {
        // listen to change event (customize selector to your needs)
        $('input[type=checkbox]').change(function (e) {
            e.preventDefault();
            if ($(this).is(':checked')) {
                // read in value
                var queryString = $(this).val();
                // loop through siblings (customize selector to your needs)
                var s = $(this).siblings();
                $.each(s, function () {
                    // see if checked
                    if ($(this).is(':checked')) {
                        // append value
                        queryString += ',' + $(this).val();
                    }
                });
                // jump to url
                window.location = baseUrl + queryString;
            }
        });
    });
</script>

这是工作解决方案的代码片段。颜色复选框的名称从color[]更改为仅color

var baseUrl = 'http://website/women/try.php?';
    $(document).ready(function () {
      // listen to change event (customize selector to your needs)
      $('input[type=checkbox]').change(function (e) {
        
        //Get all the selected color values
        var queryString = "color="+$('[name="color"]:checked')
                          .map(function() {return this.value;}).get().join(',');
        
        //Append all the selected styles
        queryString += "&style="+$('[name="type"]:checked').map(function() {return this.value;}).get().join(',');
      
        //reload page - commented for this snippet
        //window.location = baseUrl + queryString;
        alert(baseUrl + queryString);
      });
      
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- Color filter -->
<input type="checkbox" name="color" value="1"  checked >
    <label>Color 1</label>
<input type="checkbox" name="color" value="2"  checked >
    <label>Color 2</label>
<input type="checkbox" name="color" value="3"  checked >
    <label>Color 3</label>
<input type="checkbox" name="color" value="4"  checked >
    <label>Color 4</label>
<BR><BR>
  
<!-- Style filter -->
<input type="checkbox" name="type" value="1" >
<label>style #1</label>
<input type="checkbox" name="type" value="2" checked>
<label>style #2</label>
<input type="checkbox" name="type" value="3" checked>
<label>style #3</label>

使用map()函数获取所有选中的颜色和样式checkbox值,如下所示。

var baseUrl = 'http://website/women/try.php?color=';
$('input[name="color[]"], input[name="type"]').change(function () {
    var colors = $('input[name="color[]"]:checked').map(function () { return this.value; }).get().join();
    var styles = $('input[name="type"]:checked').map(function () { return this.value; }).get().join();
    window.location = baseUrl + colors + '&style=' + styles;
});