API の V3 を使用した Google マップがあります。ドラッグ可能なマーカーが1つあり、静的な他のマーカーがたくさんあります。次のように clear_markers() という関数を呼び出すドラッグ可能なマーカーの dragend リスナーを設定しました。
google.maps.event.addListener(marker_0, "dragend", function() {
clear_markers();
});
function clear_markers()
{
if (markers) {
for (var i = 1; i <= markers.length; i++ ) {
if(typeof markers[i] !== "undefined") {
markers[i].setMap(null);
}
}
}
}
for ループを 0 ではなく 1 で開始する理由は、ドラッグ可能なマーカーが最初のマーカーであるため、このマーカーを除くすべてのマーカーをマップからクリアしたいからです。
問題は次のとおりです。
clear_markers(); を呼び出すと、他の方法では問題なく機能し、マーカーはマップから削除されるため、次のように機能します。
$('#mybutton').click(function() {
clear_markers();
});
ただし、緑色のマーカーをドラッグ アンド ドロップし、dragend リスナーから呼び出された場合は機能しません。マーカーは削除されますが、すぐに再度追加されます。スクリプトを強制終了する for ループの直後に clear_markers() 関数に何かを配置すると、マーカーが削除されるため、マーカーが削除されることはわかっています。ただし、スクリプトの続行が許可されている場合、それらはまだそこにあり、削除されてすぐに再び追加されたことを意味します。
私は他のコードを呼び出していないので、API のバグのように思えます。誰にもアイデアはありますか?
問題を示す実際の例を次に示します。