1

语言:jQuery、javascript

下面的代码:运行良好。

(...)
var check_box_values = $('#myForm [type="checkbox"]:not(:checked)').map(function () 
{
    return this.value;
}).get();

下面的代码:运行良好。

function f(check_box_values)
{
    (...)
    var obj = jQuery.parseJSON(jsonData);
    var data = google.visualization.arrayToDataTable(obj);

下面的代码: for 循环运行良好,但 if 语句从不开始

for (var i = 1; i < data.getNumberOfColumns()-1; i++)
{
    if ($.inArray(i, check_box_values) > -1) 
    { 
        data.removeColumn(i);
    }
}

Html 代码:运行良好。

我究竟做错了什么?注意:check_box_values 数组已填充。

编辑:(例如)
getNumberOfColumns: 6

check_box_values array: [1,3,5]
4

1 回答 1

0

我在您的代码中看到了一个问题。调用 data.removeColumn 后,列索引将被重置,getNumberOfColumns() 的结果将与您的预期不同。换句话说,此函数并非设计为在循环内调用。

这是一个例子。假设您有五列,columIndex 的范围为 0-4。您想删除第 3 (columnIndex: 2) 和第 5 (columnIndex: 4) 列。一旦你的代码第一次执行,即removeColumn(2),列索引将被移动,getNumberOfColumns()将变为4。如果你调用removeColumn(4),它会导致运行时错误,因为索引没有指向任何列。您应该改为调用 removeColumn(3)。

于 2015-05-07T18:25:30.247 回答