2011-09-05 115 views
0

我有以下代码将复选框值推送到数组。我希望能够从数组中删除值,如果复选框未选中。任何人都可以告诉我如何做到这一点。复选框值数组添加和从数组中删除

var arr_sort = new Array(); 

$(".sort").change(function(){ 

     $.each($("input[name='sort']:checked"), function() { 
      arr_sort.push($(this).val()); 
     }); 

    }); 

回答

1

答:http://jsfiddle.net/morrison/S3e2f/

注:

  • 使用键/值系统。这样你可以知道要设置或取消设置哪个数组项目。这可能意味着给你的复选框名称。
  • 每次改变时不要遍历数组。这是不好的设计,可能会导致不良的表现。我重构了HTML。
+0

我明白你的意思了。我现在使用了你的解决方案,也许你可以回答这个问题。 http://stackoverflow.com/questions/7314060/multidimensional-array-of-multi-checkbox-group-values-jquery-post-array-ajax它是不好的形式来改变答案? – madphp

+0

不需要更改答案。 –

0
$(".sort").change(function() 
{ 
    var arr_sort = new Array(); 
    $(".sort").each(function() 
    { 
     if($(this).is(':checked')) 
     { 
      arr_sort.push($(this).val()); 
     } 
    }); 
}); 

Live Demo

+0

好的,我在你的答案中看到了解决方案,我需要在.change()内重新创建数组。你的解决方案也可以。谢谢! – madphp

+0

不客气。 –

+0

这不会将arr_sort变量的作用域限制在change()函数中吗?我不认为这就是你想要的。 – RET

2

- 忽略了答案,如果触发事件是不是复选框的Click事件。

你应该创建一个小的功能,将来自于复选框的Click事件触发数组中删除的值。

function removeVal(arr, val) 
{ 
    for(var i = 0; i < arr.length; i++) 
    { 
     if (arr[i] == val) 
      arr.splice(i, 1); 
    } 
} 

找到下面的工作示例:

http://jsfiddle.net/7NcuD/

1

既然你通过任何改变排序复选框循环,当然最简单的解决方法是刚刚$.each()前空出arr_sort阵列?

+0

是的。刚注意到这一点。 – madphp

0

您可以使用map或grep删除数组中不符合条件的元素。像这样:

var arr_check = $.grep(arr_sort,function(value){return value == ?? ;}); // since you're saving $(this).val() your array has checkbox value, so you have to filter with those values.