Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript图像加载事件绑定_Javascript_Html_Javascript Events - Fatal编程技术网

Javascript图像加载事件绑定

Javascript图像加载事件绑定,javascript,html,javascript-events,Javascript,Html,Javascript Events,我有一段代码,它循环遍历一个数组,加载图像,并在加载图像时发出通知 for (var i = 0; i < arr.length; i++) { var imageObj = new Image(); imageObj.src = url[i]; imageObj.onload= (function(i){ return function(){ console.l

我有一段代码,它循环遍历一个数组,加载图像,并在加载图像时发出通知

for (var i = 0; i < arr.length; i++) {                
    var imageObj = new Image();
    imageObj.src = url[i];
    imageObj.onload= (function(i){
                return function(){
                    console.log(i, 'loaded');
                }
            })(i);

}

有什么问题?在这种情况下,有什么方法可以避免使用闭包吗?

问题的一部分:事件不是调用
onload
,而是
load

imageObj.addEventListener('load', function() { /* ... */ }, false);

除此之外,由于
i
在事件侦听器函数之外发生更改,因此您需要一个闭包。

@gillesc一个普通的ES5数组。forEach()将为您提供一个新的作用域,因此您的绑定并不总是在最后一项上设置。与迭代索引和添加自己的闭包相比,代码更少。这不是唯一的问题,但您的第二个断开的示例显然是断开的JS,在第一行末尾缺少
i{
。为了安全起见,您不应该先分配事件,然后再分配src吗?
imageObj.addEventListener('load', function() { /* ... */ }, false);