1

我有一个复选框列表,同时选择复选框我必须将值添加到数组中,而取消选中我必须从数组中删除它。

以下代码正在使用。但取消选中时不会删除

<tr><td class="tdstyleSelect"><input type="checkbox" name="joblist" onclick="toNfroVmps(this.id);" id="' + i + '" checked>

var toNfroVmps = function(id) {
    if($('#' + id).is(':checked')) 
        elementIds.push(id);   
    else    
        delete elementIds[elementIds.indexOf(id)]
}
4

2 回答 2

9

使用Array.splice(顺便说一句,这是一种原生 JS 方法):

var index = elementIds.indexOf(id);
if (index !== -1) {
  elementIds.splice(index, 1);
}

您可能会考虑使用散列(而不是普通数组)来存储数据:每个键对应一个 ID,值为真或假。

var elementIds = {
  el1: true,
  el2: true,
  el3: false
  // ...
};

这样添加/删除元素将更加直接:

elementIds[id] = $('#' + id).is(':checked'); // either true or false

...并且您仍然可以使用各种 jQuery 列表理解函数将此哈希作为数组处理。例如,这就是您收集所有选中元素的 id 的方式:

var checkedIds = $.grep(elementIds, function(el) { return el; });
于 2013-09-12T06:47:00.247 回答
1

您可以使用splice方法删除数组项。

var toNfroVmps = function(id) 
{
    if($('#' + id).is(':checked')) 
        elementIds.push(id);   
    else
    {
        // Select the index
        var i = elementIds.indexOf(id);

        // Check if the index exists, to prevent any errors that might happen
        // If exists, delete
        if(i !== -1)
            elementIds.splice(i, 1);

    }
}
于 2013-09-12T06:49:46.020 回答