我有以下代碼(從較大的功能片段)後執行:JavaScript代碼不環路
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,它允許我增加到4,然後嘗試執行循環中的代碼,因此結束代碼,因爲res [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); }
}
你試過調試器(Firebug對Firefox來說相當不錯)? –
是的,我使用的是Firebug。謝謝。 –
通常情況下,如果永遠無法達到該術語,就會發生這種情況。 – raam86