我正在尝试使用JavaScript填充下拉列表,并在IE8中收到以下错误:
消息:'1'为null或不是对象 行:59 查尔:3 代码:0
当我通过调试器推送代码时(在本例中为JSBin),我在代码中看到以下错误:
第59行:var $ selected_view = $('#ai1ec-view-'+ 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 :(得分:0)
没有。超出范围的linter提示/错误/消息可能是因为变量是在for-in-loop的body-block中声明的;这应该有效。
然而,matches
似乎是null
- 导致异常。一旦matches
不为空,你就会打破循环,但这并不能保证某些东西真正匹配 - 循环可能刚刚结束,matches
仍为空。
BTW:你不应该使用for-in-loop来枚举split
返回的数组的属性,你想用正常的for循环迭代这些项。