我正在从事的项目中具有以下功能:
var makePreviewSimulationDiv = function(){
var errorFlag = false;
imgError = function(image){
errorFlag = true;
};
var that = this, proxy = new IAProxy(),
//imageSource = real_image_source,
imageSource = "",
image = that.append('<img class="foo" onerror="imgError(this);
"src=' + imageSource + '></img>')
.children('.sim-ui-preview-sim-image'),
container = image.run(encapsulateImg),
iconsDiv = that.append('<div class="bar"></div>')
.children('.bar');
if (!errorFlag){
image.load(function(){
container.run(zoomMaxWidth)
.run(makeDraggable)
.run(makeZoomable);
});
} else{
alert('image load error!');
}
return that;
};
目前,我已将图像src设置为
""
,以尝试调试该函数的行为(如果该图像出现错误的图像src或没有图像src),以使其正常运行。目前,我的代码正在正确捕获错误并抛出alert('image load error!');
。但是,如果我在本地范围内imgError
函数,即将代码更改为以下内容: var imgError = function(image){
errorFlag = true;
};
当
imgError
在图像加载上触发时,不再找到onerror
。在onerror
中调用的函数的作用域是什么,是否可以将imgError
移入它的作用域而无需全局声明它,同时仍然能够从errorFlag
内部访问imgError
? 最佳答案
用创建图像
var img = new Image()
绑定到它的错误和加载处理程序,并使用以下命令设置它的src
$(img).on("load",loadHandler).on("error",errorHandler)[0].src = imageSource;
现在,在上述两个处理程序中,您都可以访问
this
,并且所述处理程序的第一个参数将是event object
。function errorHandler(event) {
console.log(event);
}
function loadHandler(event) {
console.log(event);
$(this).appendTo("#imgHolder");
}