2012-09-14 42 views
1

我試圖使用JavaScript來填充下拉列表和我得到在IE8以下錯誤:是否「...超出了範圍」。 KSLint中的錯誤導致'[1]爲空或不是對象'錯誤?

消息:「1」爲空或不是對象 行:59 字符:3 代碼: 0

當我推代碼通過調試器(在這種情況下,JSBin)時,可以看到的代碼如下錯誤:

線59:變量$ selected_view = $( '#ai1ec-視圖 - ' + matches [1]); ---'匹配'超出了範圍。

JSBin中的這個錯誤是否與IE8中的錯誤相關?當代碼在Chrome,FF或IE9上運行時,錯誤不會填充任何內容。

以下是有問題的代碼片段。

// Make current view actively selected in view dropdown button. 
    var classes = $('body').attr('class').split(' '); 
    for (i in classes) { 
     // Extract current view from the body class. 
     var matches = /ai1ec-action-([\w]+)/.exec(classes[i]); 
     if (matches != null) break; 
    } 
    // Get the dropdown menu link of the active view. 
    var $selected_view = $('#ai1ec-view-' + matches[1]); 
    // Replace contents of dropdown button with menu link, plus the caret. 
    $('#ai1ec-current-view') 
     .contents() 
      .remove() 
      .end() 
     .prepend($selected_view.contents().clone()) 
     .append('<span class="caret"></span>'); 
    // Deactivate all dropdown menu items. 
    $('#ai1ec-view-dropdown .dropdown-menu li').removeClass('active'); 
    // Activate only currently selected dropdown menu item. 
    $selected_view.parent().addClass('active'); 
+0

JSBin警告看起來似乎是假的,Javascript沒有塊範圍,所以'matches'變量實際上被作用於整個函數,因此在範圍內。 – lanzz

回答

0

號的外的範圍棉短絨提示/錯誤/消息可能是因爲變量是在體的體塊宣佈爲在迴路;這應該工作。

然而,matches似乎是null - 導致異常。只要matches不爲空,你確實會中斷循環,但這並不能保證真正匹配的東西 - 循環可能會結束,並且matches仍然爲空。

順便說一句:你不應該使用for-in-loop來枚舉split返回的數組的屬性,你希望用正常的for-loop迭代這些項。

相關問題