2017-07-30 26 views
0
var _URL = window.URL || window.webkitURL; 

var $file = FS.gID('failImage'); 

var imgSize = FS.gID('failImage'); 

var file, img, imgWidth, imgHeight; 


if(file = imgSize.files[0]) { 

img = new Image(); 

    img.onload = function() { 

     imgWidth = this.width; 
     imgHeight = this.height; 


    } 

    img.src = _URL.createObjectURL(file); 

} 

alert(imgWidth); //Comes out undefined. 

imgWidthを警告するためにこの変数を取得できないのはなぜですか?私が子関数の中にvarを設定しなかったことに注意してください。imgWidthが未定義になったことを知らせるためには、親関数にも注意してください。外部関数の変数にアクセスできません

+0

を使用 - https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an非同期呼び出しである –

+0

は、onloadが非同期関数であるため、順番に実行されません。あなたがオンロードの中にアラートを入れれば、あなたは価値を得るでしょう。 –

答えて

1

IMG負荷このためラインはalert(imgWidth);

溶液を実行した後onload関数内alert(imgWidth);を移動させることです。

if (file = imgSize.files[0]) { 

    img = new Image(); 

    img.onload = function() { 

     imgWidth = this.width; 
     imgHeight = this.height; 

     alert(imgWidth); // This should work 

    } 

    img.src = _URL.createObjectURL(file); 

} 

onLoadなどがasyncrhonousであるため、コールバック関数

function afterLoad(width, height) { 
    alert(width); 
    alert(height); 
} 

if (file = imgSize.files[0]) { 

    img = new Image(); 

    img.onload = function() { 

     imgWidth = this.width; 
     imgHeight = this.height; 

     afterLoad(imgWidth, imgHeight); 

    } 

    img.src = _URL.createObjectURL(file); 

} 
+0

私はそれを作ることができる他の方法はありませんので、その変数を親関数に警告することができます。私はこれを聞いています。なぜなら、私はスクリプトの一番下に向かって、私の他の小切手と一緒に幅と高さを入れたいからです。ですから、if(imgWidth

+0

@JonW私はあなたが説明のための例として '警告'を入れていることを知っています。とにかく 'afterLoad'関数でコードを比較できます。例:afterLoad()内に置くと、afterLoadの子が唯一の場合は、問題が発生します。例:function afterLoad(width、height){ if(imgWidth

+0

1つは幅と高さにアクセスできます。私は、imgWidthとimgHeightを親関数内に設定できるようにしたいだけです。しかし、onloadを使用しなければならないと、私は子供の機能の中に入れなければなりませんでした。結果を親関数にどのように戻すことができるのか把握しようとしています。 –

関連する問題