2

IE 8 では、これの 2 番目のバージョンにより、次のエラーが発生します。

オブジェクトはこのプロパティまたはメソッドをサポートしていません。

エラーは にありmap = new L.Mapます。最初のバージョンでは、エラーはありません。

var を含めないと、自動的にグローバルスコープになると思いました。IE 8 でエラーが発生するのはなぜですか? これは IE 9 では発生しないことに注意してください。

var map;
jQuery(document).ready(function() 
{
    map = new L.Map('map', {'scrollWheelZoom': false});
 ...
}

VS:

jQuery(document).ready(function() 
{
    map = new L.Map('map', {'scrollWheelZoom': false});
 ...
}
4

2 に答える 2

6

varを含めないと、自動的にグローバルスコープになると思いました。

あなたがそれを意図したかどうかを知る方法がないので、これは信じられないほど悪い習慣です。また、厳密モードではエラーが発生します。

また、ドキュメントにその名前の要素がある場合、IEでバグが発生しmapます。

次のようにグローバルを明示的に作成できます。

jQuery(document).ready(function() {
    window.map = new L.Map('map', {
        'scrollWheelZoom': false
    });
});

ここでは、意図を明確にし、このエラーは発生しません。


これを示すためのjsfiddlesは次のとおりです(IE8以下で実行):

http://jsfiddle.net/3Jn5N/は動作します

http://jsfiddle.net/3Jn5N/1/が機能しない

于 2012-07-30T13:04:19.230 に答える
0

非厳密モードでは、宣言されていない変数に割り当てると、割り当てられた値を持つグローバル変数が作成されます。宣言も初期化もされていない変数の値にアクセスしようとすると、参照エラーがスローされます。

x = 5;
alert( x ); // shows 5

alert( y ); // Error: y is undefined
y = 10;

宣言された変数は、コードが実行される前に処理されるため、参照エラーは発生しません。

ただし、参照エラーは発生していません。オブジェクトの存在しないメソッドを呼び出そうとしたときに IE がスローするエラーが発生しているため、アクセスの試みwindow.map()などがある可能性があります。

例えばIEで:

var o = {};
o.x(); // Object doesn't support this property or method

これがあなたの問題に対する答えであるかどうかは不明new L.Map(...)ですが、呼び出すことができるオブジェクトを返しますか?

于 2012-07-30T13:31:49.273 に答える