2013-01-11 70 views
0

我想知道是否有更好的方法來添加/刪除複選框值到數組。可悲的是我不能使用ECMAScript 5 indexOf(),因爲我需要支持IE8/7。優化Javascript方法來填充或清空數組

這裏是一個工作的jsfiddle例如:http://jsfiddle.net/puyQr/

一下這個方法的作用是:

/** 
* If a user clicks onto the checkbox, the value of the value attribute is 
* only added to the array when the value not yet exists. However, if 
* the value already exists, the value is removed. 
*/ 

var values = []; 
jQuery(':checkbox').on('click', function(){  
    var index = jQuery.inArray(this.value, values); 
    if(index === -1) { 
     values.push(this.value); 
    } else { 
     values.splice(index, 1); 
    } 
}); 
+0

您可以將對象保留爲地圖並添加/刪除複選框名稱(或我猜測的值)。它會更快,但除非你有數百個複選框,否則它並沒有真正的區別。 – Pointy

+3

MDN的代碼在這些瀏覽器中支持indexOf(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf) – epascarello

回答

2

只是另一種方式從複選框獲取值:

var values = jQuery(':checkbox:checked').map(function(){ 
    return $(this).val(); 
}).get(); 

demo

2

是的,使用對象文字。

var values = {}; 
jQuery(':checkbox').on('click', function() {  
    if (this.value in values && values[this.value] === 1) { 
     values[this.value] = 0; 
    } else { 
     values[this.value] = 1; 
    } 
}); 

參見here

如果你想把它當作一個陣列後,將其轉換爲一個簡單的事情,使用for..in和檢查1保持關鍵之前。