使用setInterval时元素列表后面的SyntaxError:missing]

时间:2016-03-05 05:16:17

标签: javascript

运行以下内容:

setTimeout(this.nextScene.load(function() {
    this.nextSceneLoaded = true;
}.bind(this)), 0);

应该异步加载下一个场景并让我们知道它何时完成,但我注意到Firefox控制台中的元素列表之后出现“SyntaxError:missing”。

在StackOverflow上进行一些搜索有类似的问题,但它们似乎涉及到人们不使用函数作为setTimeout的第一个参数。

为什么会发生这种情况,我该怎么做才能解决它/有什么替代方案吗?

(也没有jQuery,等等。我想尽可能保持这个简单的JavaScript。)

2 个答案:

答案 0 :(得分:1)

执行setTimeout并将其作为第二个值传递给0的唯一原因是克服了几个不起眼的浏览器竞争条件。

你在这里的代码用回调调用this.nextScene并将该调用的结果传递给setTimeout,它不会延迟执行,因为你没有通过引用传递函数bind不在这里做任何事情除非this.nextScene传回一个函数。

我最好猜测你要做的是这个。

 HListView sb_list = (HListView) view.findViewById(R.id.submenu_button);
 sb_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        view.setSelected(true);

答案 1 :(得分:0)

好的,感谢David Bradshaw让我意识到我没有将一个函数传递给setTimeout(早上5点编码是一个坏主意)。我真正想做的是:

setTimeout(function() {
    this.nextScene.load(function() {
        this.nextSceneLoaded = true;
    }.bind(this));
}.bind(this), 0);

然而,正如其他用户指出的那样,它确实没有帮助,仍然阻止了用户界面。希望如果有人在将来寻找类似的东西,这将是有用的。