それは半分だけマーカーを除去からメンバーを除去しながらアレイを通してカウントするi
使用 -
function loop_popups() {
for(var i = 0; i < map.popups.length; ++i) {
map.removePopup(map.popups[i]);
};
}
。代わりに、試してみてください。
while(map.popups.length) {
map.removePopup(map.popups[0]);
}
を使用すると、ループが永遠に繰り返されない、絶対に確認するには:
/**
* Closes all the popups.
*/
function closePopups() {
// Make sure the loop terminates...
var maxIterations = 100;
while(map.popups.length && --maxIterations) {
var popup = map.popups[0];
map.removePopup(popup);
popup.destroy();
}
}
拘束されたループのこの種の技術は、原子力発電所で使用されています。
5つのポップアップがあるとします。
- ポップアップ= 5、I = 0、max.popups.length = 5つの
- ポップアップ= 4、i = 1から、max.popups.length = 4つの
- ポップアップ= 3、I = 2、 max.popups.length = 3つの
- ポップアップ= 2、I = 3、max.popups.length = 2
i
の値は、現在max.popups.length
を超えます。ループは終了しますが、ポップアップが閉じられていません。 (ポップアップ配列にアクセスしようとしたときにも...境界エラーのうち、インデックスが行われている場合があります)
としてあなたのループを書かなかったかもしれない:これはもはや移動するターゲットに対して比較
function loop_popups() {
for(var i = map.popups.length - 1; i >= 0; i--) {
map.removePopup(map.popups[i]);
};
}
また、ゼロと比較するのがレジスタ(ほとんどのコンピュータアーキテクチャ上)と比較するよりも速いため、元のループよりも高速に実行されます。
ページをリロードするためには,.submit()を作成しないでください。 – igorti