【问题标题】:SyntaxError: missing ] after element list [object Object]语法错误:元素列表 [object Object] 后缺少 ]
【发布时间】:2013-11-26 13:44:01
【问题描述】:

我在萤火虫中遇到了这个错误:

     SyntaxError: missing ] after element list

    [object Object]

以下 javascript 代码:

for ( var i = 0; i < 4; i++ ) {
    setTimeout( function(){
        closeBtn( i,'.lt400' );
        // the error exactly happened in next line:
        setTimeout($('#uploaded-holder').hide(), i * 300 );
    }, i * 300 ); 
}

我不知道那里怎么会缺少 ].. 顺便说一下,在 chrome 中我收到了这个错误:

Uncaught SyntaxError: Unexpected identifier

【问题讨论】:

  • 更好setTimeout( function () { $('#uploaded-holder').hide() }, i * 300 );
  • 是的,我做到了,没关系,谢谢:)
  • 很高兴听到,它有帮助:)

标签: javascript


【解决方案1】:

setTimeout 需要一个函数或一串代码作为第一个参数。您正在传递此表达式的评估结果:

$('#uploaded-holder').hide()

这个表达式既不返回字符串,也不返回函数。它返回一个 jQuery 集合。

你想要:

setTimeout(function () {
    $('#uploaded-holder').hide();
}, i * 300 );

但是,考虑到 setTimeouts 和循环的组合,您在那里有一组奇怪的代码。一旦这个错误得到解决,我预计会出现一些奇怪的事情。例如,i 在执行许多内部函数时不会是您所期望的......

【讨论】:

  • 或者他可以简单地做setTimeout($('#uploaded-holder').hide,i*300);
  • @AlexW 我还没有测试过,但我相信这会导致 jQuery 集合实例内部的 this 范围界定问题
【解决方案2】:

你可以试试这个:-

setTimeout( function () 
{ $('#uploaded-holder').hide() }, i * 300 );

而不是

setTimeout($('#uploaded-holder').hide(), i * 300 );

因为setTimeout 需要一个字符串或一个函数作为第一个参数。

【讨论】:

    【解决方案3】:

    你也可以试试这个,这个也行

    setTimeout(" $('#uploaded-holder').hide() ", i * 300 );

    在双引号内添加第一个参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 2022-08-10
      • 1970-01-01
      • 2018-02-04
      • 2020-07-14
      相关资源
      最近更新 更多