从eventlistener更新全局变量

时间:2014-06-09 16:08:36

标签: javascript global-variables video.js event-listener

我正在尝试收集页面上所有视频的时间并将它们添加到数组中。这是代码:

var allvideos = $('video');
var times = [];
for ( i=0; i < allvideos.length; i++ ) {
    allvideos[i].addEventListener('loadedmetadata', function() {
        videoDuration = this.duration;
        times.push(videoDuration);
    });
};

如果我在EventListener中的console.log(次),它按预期工作,但如果我在for循环后记录它是空的。我无法弄清楚为什么会这样。有人可以帮忙,请解释原因吗?非常感谢。

我正在使用jQuery和Video.js。

取值

1 个答案:

答案 0 :(得分:3)

考虑代码的执行方式:

  1. 创建times数组
  2. 设置事件监听器
  3. 使用console.log
  4. 输出times数组中的值
  5. 调用事件侦听器并推送到times数组
  6. 它未在videoDuration数组中显示times的原因是因为times在该时间点为空。您必须等到所有事件侦听器都被调用之后再输出数组中的值。


    如果要在调用所有事件侦听器后输出数组,则可以执行以下操作:

    for (var i = 0; i < allvideos.length; i++) {
        allvideos[i].addEventListener('loadedmetadata', function() {
            times.push(this.duration);
    
            if (times.length === allvideos.length) {
                console.log(times);
            }
        });
    };