2011-09-05 118 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.