0

これが機能しないのはなぜですか?「prw」と「prh」変数を、それらが計算される関数の外側に設定すると、スコープ関数内で機能すると思いました。しかし、そうではありません!私は何を間違っていますか?

    $(document).ready(function() {

            var wrap = document.getElementById('imdiv');
            var img = wrap.getElementsByTagName('img')[0];

            var prw;
            var prh;

            $("<img/>")
                .attr("src", $(img)
                .attr("src"))
                .load(function() {
                    prw = this.width;
                    prh = this.height;
            });

            console.log('prw ~ ', prw);
            console.log('prh ~ ', prh);
    });
4

3 に答える 3

2

問題はグローバル変数とは関係ありません.唯一の問題は、変数に値を設定する前に変数の値を出力していることです.Load関数は、画像がDOMにロードされると呼び出されます.

これが最初に実行されます。まだ値は定義されていません

console.log('prw ~ ', prw);
console.log('prh ~ ', prh);

その後、これが実行されます。

prw = this.width;
prh = this.height;

正しい値を表示したい場合は、設定した直後に値を出力する必要があります

$("<img/>")
    .attr("src", $(img)
    .attr("src"))
      .load(function() {
            prw = this.width;
            prh = this.height;
            console.log('prw ~ ', prw);
            console.log('prh ~ ', prh);
       });
于 2013-07-17T07:20:59.650 に答える
1

次のようにします。

var prw;
var prh;

$(document).ready(function() {

var wrap = document.getElementById('imdiv');
var img = wrap.getElementsByTagName('img')[0];

$("<img/>")
.attr("src", $(img)
.attr("src"))
.load(function() {
    prw = this.width;
    prh = this.height;
    return doStuff()
})
});

function doStuff(){
    console.log('prw ~ ', prw);
    console.log('prh ~ ', prh);
}
于 2013-07-17T07:24:33.397 に答える