一度に1つずつ追加するようにコーディングすると、Googleマップ(V3)に追加したポリラインのクリックイベントにハンドラーを正常に追加できましたが、forループを作成してデータを単純に反復処理すると、失敗します。
作業デモ:
http://www.ikfoundation.org/demo/works.html
http://www.ikfoundation.org/demo/fails.html
線を引くビットを除いて、コードはそれぞれ同じです。
作品:
var linePts = [[
new google.maps.LatLng(59.454924068851290, 17.094726562500000),
new google.maps.LatLng(55.984639327677950, 17.270507812500000),
],[
new google.maps.LatLng(51.081191044453350, 26.938476562500000),
new google.maps.LatLng(62.112946929861720, 26.586914062500000)
]];
// Draw the lines...
elines[0] = new google.maps.Polyline({
path: linePts[0],
strokeColor: "#0000ff",
strokeOpacity: 1.00,
strokeWeight: 7,
clickable: true,
editable: true,
geodesic: true,
zIndex: 1,
map: map,
myID: 0
});
google.maps.event.addListener(elines[0], 'click', function()
{
lineClick(elines[0]);
});
elines[1] = new google.maps.Polyline({
path: linePts[1],
strokeColor: "#0000ff",
strokeOpacity: 1.00,
strokeWeight: 7,
clickable: true,
editable: true,
geodesic: true,
zIndex: 1,
map: map,
myID: 1
});
google.maps.event.addListener(elines[1], 'click', function()
{
lineClick(elines[1]);
});
function lineClick(line)
{
alert("Line clicked with myID=" + line.myID);
}
失敗します(上記と同じラインポイント定義配列と、両方で同じlineClick関数を除外しました):
for (var i=0; i<=1; i++)
{
elines[i] = new google.maps.Polyline({
path: linePts[i],
strokeColor: "#0000ff",
strokeOpacity: 1.00,
strokeWeight: 7,
clickable: true,
editable: true,
geodesic: true,
zIndex: 1,
map: map,
myID: i
});
google.maps.event.addListener(elines[i], 'click', function()
{
lineClick(elines[i]);
});
}
私は何を間違えましたか?どちらも、これらの変数でまったく同じ変数名とインデックスを使用しています。そして、クリックリスナーを除いて、私の例のリンクで見ることができるように、すべてが完全に機能します。後者の「失敗」バージョンでは、ポリラインがlineClick関数にまったく渡されていないように見えるため失敗します(エラーを確認するには、Javaデバッガーを実行する必要があります)。
ありがとうございました!