无法在image.onload中产生输出
Not able to produce output inside image.onload
var img = new Image();
var url = "some url "
var value = "old value"
img.onError = function() {
alert('Cannot load image: "'+som+'"');
};
img.crossOrigin = '';
img.onload = function() {
// do something
value = "New value"
};
img.src = som;
alert(value);// pops with "old value"
既然我没有得到任何改变,我已经做了内部onload函数?结果我存储在onload函数不能全局使用?
onload
之后的代码不会等待它完成后才执行。
var value = 'old value';
img.onload = function () { // image did not load yet, still waiting
// do something
value = "New value"
};
alert(value); // doesn't care if onload is done or not
由于onload
在alert()
显示之前没有执行,因此值没有改变。你需要一个回调或者类似的东西
var value = 'old value';
img.onload = function () {
// do something
value = "New value"
imageLoaded();
};
function imageLoaded() { // or just give the value as parameter
alert(value);
}
问题是,img.onload
内部的函数是在alert(value); '之后执行的。
时间表:
-
value = "old value";
- img。onload设置为函数(该函数尚未执行)
-
alert(value);
- 图片已加载
-
value = "new value";
如果您在加载图像后在浏览器控制台中输入value
,它应该是"new value"
根据您的代码,预计alert
将显示"旧值",因为它在onload
回调之前执行。由于异步代码的魔力,执行顺序概述如下:
// 1: Declare variables
var img = new Image();
var url = 'some url';
var value = 'old value';
// 2: Assign callback
img.onload = function () {
// 4: Update value
value = 'new value';
};
// 3: Alert value
alert(value);
如果你不相信我,就给警报添加一个延迟:
// THIS IS BAD CODE. It's just to prove that your callback is executing.
setTimeout(function () {
alert(value);
}, 10000);
只要你的图像加载时间不超过10秒,这应该会给你期望的输出。
相关文章:
- 在JavaScript中输出转义字符
- 如何在jQuery中将函数的输出分配给变量
- window.onload没有'无法在Android WebView中工作
- Javascript,输出结果后页面不断刷新
- JavaScript-动态SVG-onload属性-未触发事件
- Datetime格式为Friendly Time.Moment JS输出错误
- 如何将angularjs中的javascript字符串输出为循环数组
- HTML5FileReader输出到D3.js图表
- console.log以外的Javascript输出函数
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- 在phonegap中为android调用onload函数的最佳方式
- PHP中的数组输出
- 以不同的顺序输出数据
- 使用Rivets.js输出类
- image.onload事件和浏览器缓存
- 在Chrome扩展内部输出Google API调用
- 将函数从onclick修改为onload
- 输出表示img元素不存在(为null),但脚本在img的实现下面,并使用了onload()
- 无法在image.onload中产生输出
- 当url生成PDF输出时,Iframe onload不工作