次のコードがあります (より大きな関数のスニペット):
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 ループに <= for the while パラメータがあり、エラーが発生していました。ここではそうではありませんが、コードをステップ実行すると、必要以上にループを実行しようとしていました。 、つまり、res.length が 4 の場合、i を 4 にインクリメントしてループ内でコードを実行しようとしたため、res[i] が範囲外だったためにコードが終了していました。コンソールのエラー。示されているようにコードを変更すると、 i == res.length のときにループが実行されません
では、Firebug は元のコードがループの最後を超える実行を許可しないことをどのように認識したのでしょうか? また、なぜループが必要以上に実行されるのでしょうか?
関数全体を以下に示します。これは、サーバーから受信した値を select に入力する 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); }
}