【问题标题】:Adding and removing checkbox values to an array not working向数组添加和删除复选框值不起作用
【发布时间】:2015-05-26 00:45:03
【问题描述】:

我以前做过,但由于某种原因,我当前的实现不起作用。

我有一些复选框,单击时,我希望将该值放入数组中。当再次单击该复选框时,我想删除该值。

HTML:

<div class="fieldwrap form-filters">
  <label for="filter0" class="icon-text checkbox">
      <input type="checkbox" id="filter0" name="filter0" value="Coast" class="hidden" />
    Coast</label>
  <label for="filter1" class="icon-text checkbox">
      <input type="checkbox" id="filter1" name="filter1" value="Great views" class="hidden" />
    Great views</label>
  <label for="filter2" class="icon-text checkbox">
      <input type="checkbox" id="filter2" name="filter2" value="Historic" class="hidden" />
    Historic</label>
  <label for="filter3" class="icon-text checkbox">
      <input type="checkbox" id="filter3" name="filter3" value="Moorland" class="hidden" />
    Moorland</label>
  <label for="filter4" class="icon-text checkbox">
      <input type="checkbox" id="filter4" name="filter4" value="Wildlife" class="hidden" />
    Wildlife</label>
  <label for="filter5" class="icon-text checkbox">
      <input type="checkbox" id="filter5" name="filter5" value="Woodland" class="hidden" />
    Woodland</label>
</div>

JS:

var filter_options = [];

$('.form-filters input:checkbox').click(function() {

    var name = $(this).val().trim();
    var index = filter_options.indexOf(name);
    if (index > -1) {
        filter_options = filter_options.slice(index, 1);
        console.log('Remove: '+name+' at index: '+index);
    } else {
        filter_options.push(name);
        console.log('Add: '+name);
    }

    $('#result').html(filter_options.join('; '));
    console.log(filter_options);

});

演示: http://jsfiddle.net/WTzKR/873/

由于某种原因,它似乎随机删除了这些值,但似乎总是添加它们。

我做错了什么?

【问题讨论】:

  • 对于remove,不需要做slice(0, index) 和slice(index + 1) 来获取remove index前后的数组部分吗?

标签: javascript jquery arrays checkbox


【解决方案1】:

简单的改变:

filter_options = filter_options.slice(index, 1);

filter_options.splice(index, 1);

在您的 if 块中。

splice 就是您要找的。​​p>

【讨论】:

  • 是的,成功了!谢谢,这是一个简单的错误,但它使一切变得不同。感谢您的帮助。
【解决方案2】:

试试这个:

<script>
        var filter_options=[];
        $('.form-filters input:checkbox').click(function()
        {
            var name=$(this).val().trim();
            if(this.checked)
            {
                filter_options.push(name);
                console.log('Add: ' + name);
            }
            else
            {
                var index=filter_options.indexOf(name);
                if(index > -1)
                {
                    filter_options.splice(index, 1);
                    console.log('Remove: ' + name + ' at index: ' + index);
                }
            }
            $('#result').html(filter_options.join('; '));
            console.log(filter_options);
        });
    </script>

【讨论】:

    【解决方案3】:

    尝试input:checkbox:checked 选择器以仅获取选中的:

    var filter_options = [];
    
    $('.form-filters input:checkbox').click(function() {
        filter_options = $('.form-filters input:checkbox:checked').map(function(){
          return this.value; //get the checkbox value
        }).get();//get all values as array
        $('#result').html(filter_options.join('; '));
        console.log(filter_options);
    });
    

    【讨论】:

      【解决方案4】:

      var filter_options = [];
      
      $('.form-filters input:checkbox').click(function() {
      	filter_options = [];
      	$('.form-filters input:checkbox').each(function(idx, obj) {
              if($(obj).is(":checked"))
                  filter_options.push($(obj).val());
          });
      	$('#result').html(filter_options.join('; '));
      	console.log(filter_options);
      	
      });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-24
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多