我有以下代码(来自更大功能的代码段):
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); }
}
答案 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); }