从eventlistener更新全局变量

Updating global variable from eventlistener

本文关键字:全局变量 更新 eventlistener      更新时间:2023-09-26

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

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(times),它按预期工作,但如果我在for循环后记录它,它是空的。我不明白为什么会这样。有人能帮忙吗,请解释一下原因?非常感谢。

我使用jQuery和Video.js。

S

考虑你的代码是如何执行的:

    创建times数组
  1. 设置事件监听器
  2. 用console.log
  3. 输出times数组中的值
  4. 事件监听器被调用并推送到times数组

times数组中没有显示videoDuration s的原因是因为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);
        }
    });
};