我正在从事的项目中具有以下功能:

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");
}

10-06 01:39