2012-09-07 22 views
0

我有以下代碼(從較大的功能片段)後執行: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); } 
} 
+0

你試過調試器(Firebug對Firefox來說相當不錯)? –

+0

是的,我使用的是Firebug。謝謝。 –

+0

通常情況下,如果永遠無法達到該術語,就會發生這種情況。 – raam86

回答

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

感謝您的建議,但肯定我應該測試res [i]是否有效,因爲for循環不應該執行如果我== res.length?我的問題更多的是爲什麼循環執行如果我== 4和res.length == 4。 –