0

我有以下代码(来自更大函数的片段):

var res = data.results;
for (var i=0;i<res.length;i++) {
    $('<option value="' + res[i] + '">' + res[i] + '</option>').appendTo(sel);
}
if (data.select && data.select!='') { sel.val(data.select); } 

出于某种原因,

if (data.select && data.select!='') { sel.val(data.select); } 

行只是没有执行,并且在 Firebug 中显示为灰色,表明 Firebug 不知何故知道它无法访问。如果我像这样对代码进行简单的更改:

var res = data.results;
for (var i=0;i<res.length;i++) {
    var opt = '<option value="' + res[i] + '">' + res[i] + '</option>';
    $(opt).appendTo(sel);
}
if (data.select && data.select!='') { sel.val(data.select); }

最后一行运行没有问题。

我在这里找到了类似的帖子,其中 for 循环的 while 参数有一个 <= 导致错误,虽然这里不是这种情况,但当我单步执行代码时,它试图执行循环的次数比它应该执行的多一次,即如果 res.length 为 4,它允许 i 递增到 4,然后尝试执行循环中的代码,因此结束代码,因为 res[i] 超出范围,即使它没有放置控制台中的错误。如果我按照演示更改代码,则当 i == res.length 时循环不会运行

那么,Firebug 是如何知道原始代码不允许在循环结束后执行的,为什么循环执行的次数比它应该执行的多一次呢?

整个函数如下,它是来自 jQuery ajax 调用的成功回调,该调用使用从服务器接收到的值填充选择:

function GetDeptsOK(data, textStatus, jqXHR) {
    var sel = $('#orgpicker').find('select[name="orgpicker-dept"]');
    if (sel.length == 0) {
        var cell = $('#orgpicker-deptcell');
        cell.text('');
        $('<select name="orgpicker-dept"></select>').appendTo(cell);
        sel = $('#orgpicker').find('select[name="orgpicker-dept"]');
    } else {
        sel.find('option').remove();
    }
    $('<option value=""></option>').appendTo(sel);
    var res = data.results;
    for (var i=0;i<res.length;i++) {
        $('<option value="' + res[i] + '">' + res[i] + '</option>').appendTo(sel);
    }
    if (data.select && data.select!='') { sel.val(data.select); }
} 
4

1 回答 1

1

将其替换为

var res = data.results;
for (var i=0;i<res.length;i++) {
    if(!res[i])
       break;
    var opt = '<option value="' + res[i] + '">' + res[i] + '</option>';
    $(opt).appendTo(sel);
}
if (data.select && data.select!='') { sel.val(data.select); }
于 2012-09-07T09:57:03.553 回答