1

我正在尝试使用 JavaScript 填充下拉列表,并在 IE8 中收到以下错误:

消息:“1”为空或不是对象行:59 字符:3 代码:0

当我通过调试器(在本例中为 JSBin)推送代码时,我在代码中看到以下错误:

第 59 行: var $selected_view = $( '#ai1ec-view-' + matches[1] ); --- 'matches' 使用超出范围。

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' );
4

1 回答 1

0

不。超出范围的 linter 提示/错误/消息可能是因为该变量是在该 for-in-loop 的主体块中声明的;这应该有效。

然而,matches似乎是null- 导致异常。只要matches不为空,您就会中断循环,但这并不能保证真正匹配的内容 - 循环可能刚刚结束,并且matches仍然为空。

顺便说一句:您不应该使用 for-in-loop 来枚举由返回的数组的属性split,您希望使用普通的 for 循环来迭代项目。

于 2012-09-14T13:43:05.100 回答