我有以下代码(来自更大函数的片段):
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); }
}