2011-08-09 13 views
0
私はjQueryの .load(function(){...})ハンドラの内部に2つのローカル変数を設定してい

の内部で宣言されたローカルjavascriptの変数にアクセスすることはできませんが、私は、ハンドラの外でこれらの変数にアクセスする方法を見つけることができません。私はvar宣言を削除しようとしましたが、うまくいきませんでした。今私はreturnを使用しようとしていますが、私はそれを動作させることはできません。数値を警告する代わりに、コードを実行するときにFirefoxが「[object HTMLImageElement]」に警告しています。ハンドラ/関数内に配置されたときはjqueryの負荷ハンドラ

*私はそのalert(x)動作を確認することができます。

以下のコードは、Xavi's solutionの画像の実際の寸法を読み取るための変更です。

var imagepopXY = $("<img/>").attr('src', imagepopSrc).load(function() { 
    var x = this.width; 
    var y = this.height; 
    return [x,y] 
}); 

alert (imagepopXY[0]); 

答えて

0

imagepopXYは、画像が含まれています。より大きな問題は、Mrchiefのソリューションでさえ、アラートでそれらの値が表示されないことです。どうして?イベントがロードされたときにロードイベントが発生し、アラートがトリガーされた後のイベントがほとんどの場合発生します(イベントのこれらの値を割り当てているため、残りのコードは無視されます)。

それは続行する前に、アプリケーションは、xとyの値を必要とする場合、それは単にロードイベント内の関数呼び出しを置くのがベストでしょう。このように:

$("<img/>").attr('src', imagepopSrc).load(function() { 
    keepWorkingWithTheImage(this.width, this.height); 
}); 

var keepWorkingWithTheImage = function(x, y) { 
// your code is here 
alert(x); 
alert(y); 
}; 
+0

私はそれを微調整しましたが、ロード関数内から関数を呼び出すソリューションが機能しました。ありがとう。 –

1

imagepopXYには画像が含まれていますが、機能は含まれていません!

だから、このようにすることはできません。

あなたはグローバル変数を定義したい場合は、関数の前にそれらを定義:

var x; var y; 

var imagepopXY = $("<img/>").attr('src', imagepopSrc).load(function() { 
    x = this.width; 
    y = this.height; 
}); 

が、これは非常に良いコードではありません!

+0

私はそれが悪いコードだとは言いませんが、あなたの提案はうまくいきません。 'x'と' y'はあなたのメソッドを使ってまだ未定義です。 –

+0

loadメソッドが非同期と呼ばれるように注意する必要があります。ですから、imagepopXYの直後にxとyをテストすると、xとyは未定義になります! XとYは、画像がロードされたときにのみ塗りつぶされます。 –

0

はこのようにそれを試してみてください:ジェロームは、すでに指摘したように

var imagepopXY = {}; 

$("<img/>").attr('src', imagepopSrc).load(function() { 
    imagepopXY.x = this.width; 
    imagepopXY.y = this.height; 

}); 

alert ('X: ' + imagepopXY.x + ' Y: ' + imagepopXY.y);