🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

解決済

1回答

658閲覧

GoogleMapで複数マーカーに吹き出しを出したい【JavaScript】

teramasa

総合スコア76

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

0クリップ

投稿2021/01/11 08:58

前提・実現したいこと

GoogleMapで各マーカーに個別の吹き出しを出したい

発生している問題・エラーメッセージ

geocodeメソッドのコールバック内ではiがすでに3になってしまうため、forループのiを使うことができない

Uncaught TypeError: Cannot read property 'name' of undefined

該当のソースコード

JavaScript

1<script src="https://maps.googleapis.com/maps/api/js?key=MYKEY&callback=initMapWithAddress" async defer></script> 2<script> 3function initMapWithAddress() { 4 var _my_address = [ 5 {'address': '東京都千代田区永田町1丁目7-1', 'name': '店舗A'}, 6 {'address': '東京都千代田区永田町2丁目7-4', 'name': '店舗B'}, 7 {'address': '東京都千代田区永田町4丁目7-7', 'name': '店舗C'}, 8 ]; 9 10 var opts = { 11 zoom: 12, 12 mapTypeId: google.maps.MapTypeId.ROADMAP, 13 }; 14 var my_google_map = new google.maps.Map(document.getElementById('place_map'), opts); 15 var geocoder = new google.maps.Geocoder(); 16 17 for (var i = 0; i < _my_address.length; i++) { 18 geocoder.geocode( 19 { 20 'address': _my_address[i]['address'], 21 'region': 'jp' 22 }, 23 function(result, status){ 24 if(status==google.maps.GeocoderStatus.OK){ 25 var latlng = result[0].geometry.location; 26 my_google_map.setCenter(latlng); 27 var marker = new google.maps.Marker({position:latlng, map:my_google_map, title:latlng.toString(), draggable:true}); 28 google.maps.event.addListener(marker, 'dragend', function(event){ 29 marker.setTitle(event.latLng.toString()); 30 }); 31 google.maps.event.addListener(marker, 'mouseover', function (event) { 32 new google.maps.InfoWindow({ 33 content: '<div class="">' + _my_address[i]['name'] + '</div>' 34 }).open(marker.getMap(), marker); 35 }); 36 } 37 } 38 ); 39 } 40}

試したこと

InfoWindowメソッドをループ外に出したがNG

JavaScript

1<script src="https://maps.googleapis.com/maps/api/js?key=MYKEY&callback=initMapWithAddress" async defer></script> 2<script> 3function initMapWithAddress() { 4 var _my_address = [ 5 {'address': '東京都千代田区永田町1丁目7-1', 'name': '店舗A'}, 6 {'address': '東京都千代田区永田町2丁目7-4', 'name': '店舗B'}, 7 {'address': '東京都千代田区永田町4丁目7-7', 'name': '店舗C'}, 8 ]; 9 10 var opts = { 11 zoom: 12, 12 mapTypeId: google.maps.MapTypeId.ROADMAP, 13 }; 14 var my_google_map = new google.maps.Map(document.getElementById('place_map'), opts); 15 var geocoder = new google.maps.Geocoder(); 16 17 for (var i = 0; i < _my_address.length; i++) { 18 geocoder.geocode( 19 { 20 'address': _my_address[i]['address'], 21 'region': 'jp' 22 }, 23 function(result, status){ 24 if(status==google.maps.GeocoderStatus.OK){ 25 var latlng = result[0].geometry.location; 26 my_google_map.setCenter(latlng); 27 var marker = new google.maps.Marker({position:latlng, map:my_google_map, title:latlng.toString(), draggable:true}); 28 google.maps.event.addListener(marker, 'dragend', function(event){ 29 marker.setTitle(event.latLng.toString()); 30 }); 31 attachMessage(marker, _my_address[i]['name']); 32 google.maps.event.addListener(marker, 'mouseover', function (event) { 33 new google.maps.InfoWindow({ 34 content: '<div class="">' + _my_address[i]['name'] + '</div>' 35 }).open(marker.getMap(), marker); 36 }); 37 } 38 } 39 ); 40 } 41 function attachMessage(marker, _my_address) { 42 google.maps.event.addListener(marker, 'mouseover', function(event) { 43 new google.maps.InfoWindow({ 44 content: _my_address 45 }).open(marker.getMap(), marker); 46 }); 47 } 48}

みなさまのお力添えをよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

var iなど全てのvarletに置き換えてみてください。

投稿2021/01/11 15:18

kei344

総合スコア69596

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teramasa

2021/01/12 01:42

kei344様 おかげさまで正常に動作いたしました。varのため上書きされてしまったのが原因でした。 アドバイスとても感謝しております。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問