循环后javascript代码不会执行

时间:2012-09-07 09:42:29

标签: javascript jquery

我有以下代码(来自更大功能的代码段):

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循环有一个&lt; = for while参数导致错误,虽然这不是这里的情况,当我逐步执行代码时,它试图再次执行循环比它应该有的,即如果res.length是4,它允许我增加到4然后尝试执行循环中的代码,因此结束代码因为res [i]超出范围,即使它没有在控制台中放置错误。如果我按照演示更改了代码,则在i == res.length

时循环不会运行

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

整个函数位于下面,是来自jQuery ajax调用的成功回调,该调用使用从服务器接收的值填充select:

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); }
} 

1 个答案:

答案 0 :(得分: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); }