2013-07-24 39 views
1

我有如下因素的代码:为什么这些变量“未定义”?

var canvasData; 
var canvas2imgval; 

imageObj1.onload = function() { 
    ctx.drawImage(imageObj1, 0, 0, wdOb1, hgOb1); 
    imageObj2.onload = function() { 
     ctx.drawImage(imageObj2, imgposLeft, imgposTop, wdOb2, hgOb2); 
     //img = c.toDataURL("image/png"); 
     //document.write('<img src="' + img + '" width="256" height="256"/>'); 
     //canvas2img 
     canvasData = c.toDataURL("image/png"); 
    } 

} 
console.log("canvasData : "+canvasData); 
$("#canvas2img").val(canvasData) ; 
canvas2imgval = $("#canvas2img").val() ; 
console.log("canvas2imgval1 : "+canvas2imgval); 

问题是,当我观看这两个变量的值,是canvasDataundefinedcanvas2imgval1没有价值。 我不知道我的代码有什么问题。通常,这两个变量都用JavaScript关键字var公开标记。

+0

'canvasData = c.toDataURL(“image/png”);'什么是'c'? 'canvas2imgval = $(“#canvas2img”)。val();'那个元素是否存在? – Tro

+0

您可以在映像onload事件处理程序中为这些变量赋值,但在执行这些处理程序之前尝试访问它们。 – pawel

+0

您在imageObj1加载之前使用这些变量。这是HTTP请求,您的浏览器将加载HTML然后JavaScript然后其他对象。 –

回答

1

您为图像onload事件处理程序中的这些变量赋值,但在执行这些处理程序之前尝试访问它们。

为了使用这些变量,您可以创建一个将在执行imageObj2.onload后调用的函数。我还建议通过canvasData作为参数,而不是使用全局变量(只要它不在其他地方使用)。

var canvas2imgval; 
var afterLoad = function(canvasData){ 
    console.log("canvasData : "+canvasData); 
    $("#canvas2img").val(canvasData) ; 
    canvas2imgval = $("#canvas2img").val() ; 
    console.log("canvas2imgval1 : "+canvas2imgval); 
}  

imageObj1.onload = function() { 
ctx.drawImage(imageObj1, 0, 0, wdOb1, hgOb1); 
    imageObj2.onload = function() { 
     ctx.drawImage(imageObj2, imgposLeft, imgposTop, wdOb2, hgOb2); 
     //img = c.toDataURL("image/png"); 
     ////////document.write('<img src="' + img + '" width="256" height="256"/>'); 
     //canvas2img 
     canvasData = c.toDataURL("image/png"); 
     afterLoad(canvasData); 
    } 

} 
相关问题