質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

Google マップ

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

Q&A

解決済

3回答

2794閲覧

googlemapAPIの、プロパティについて

yukiko08

総合スコア7

JavaScript

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

Google マップ

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

0グッド

0クリップ

投稿2017/09/17 12:14

###前提・実現したいこと

javascriptで
googlemapAPIを用いて マッピングをしようとしている

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

open()プロパティがないと、怒られてしまいます
ドキュメント通りにしている気がするのですが

mapscript.js:47 Uncaught TypeError: Cannot read property 'open' of undefined

###該当のソースコード

var map; var marker = []; var infowindow = []; var data = [ { name: '名古屋駅', lat: 35.170897, lng: 136.881558 , content: 'funny' }, { name: '大名古屋ビルヂング', lat: 35.172311, lng: 136.884568, content: 'funny1' }, { name: '国際センター駅', lat: 35.172038, lng: 136.887701, content: 'funny2' } ]; Object.keys console.log() function initMap() { map = new google.maps.Map(document.getElementById('map'), { center: {lat: 35.170981, lng: 136.881556} , zoom: 15 }); for (var i = 0; i < data.length; i++) { var markerLatLng = {lat: data[i]['lat'], lng: data[i]['lng']} marker[i] = new google.maps.Marker({ position: markerLatLng, map: map , title:data[i]['name'] }); var string = data[i]['content'] infowindow[i] = new google.maps.InfoWindow({ content: string }); google.maps.event.addListener(marker[i],'click',function(){ infowindow[i].open(map,marker[i]); }); } }

###試したこと

google.maps.event.addListener(marker[i],'click',function(){
infowindow[i].open(map,marker[i]);
はもともと
marker[i].addListener('click',function(){
infowindow[i].open(map,marker[i]);

https://developers.google.com/maps/documentation/javascript/3.exp/reference
を参考にして修正したのですが、関係なかったです

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

unau

2017/09/17 12:33

var string = data[i]['content']、のところ、末尾にセミコロンがありませんが、コードをコピペしたときに落としましたか。
guest

回答3

0

クリックイベントを定義する箇所を以下のようにすれば、InfoWindowを開くことが出来ます。

javascript

1 google.maps.event.addListener(marker[i],'click', (function (i) { 2 return function () { 3 infowindow[i].open(map,marker[i]); 4 }; 5 })(i));

投稿2017/09/17 13:39

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

おっしゃる通りにしたらできました!
なかなか基礎的な部分でしたね????
ありがとうございます!

投稿2017/09/18 08:42

yukiko08

総合スコア7

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

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

0

ベストアンサー

addListener 内の ifor (var i = 0i なので、forが終わった段階で data.length と同じになり、参照しようとしても値がありません。

JavaScript

1var map; 2var marker = []; 3var infowindow = []; 4var data = [ 5 { 6 name: '名古屋駅', 7 lat: 35.170897, 8 lng: 136.881558 , 9 content: 'funny' 10 }, { 11 name: '大名古屋ビルヂング', 12 lat: 35.172311, 13 lng: 136.884568, 14 content: 'funny1' 15 }, { 16 name: '国際センター駅', 17 lat: 35.172038, 18 lng: 136.887701, 19 content: 'funny2' 20 } 21]; 22// Object.keys 23// console.log() 24 25function initMap() { 26 map = new google.maps.Map(document.getElementById('map'), { 27 center: {lat: 35.170981, lng: 136.881556} , 28 zoom: 15 29 }); 30 31 data.forEach(function( val, i ){ 32 var markerLatLng = {lat: data[i]['lat'], lng: data[i]['lng']}; // ← 「;」抜け 33 34 marker[i] = new google.maps.Marker({ 35 position: markerLatLng, 36 map: map , 37 title:data[i]['name'] 38 }); 39 40 var string = data[i]['content']; // ← 「;」抜け 41 infowindow[i] = new google.maps.InfoWindow({ 42 content: string 43 }); 44 45 google.maps.event.addListener(marker[i],'click',function(){ 46 infowindow[i].open(map,marker[i]); 47 }); 48 }); 49 50}

【Array.prototype.forEach() - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

投稿2017/09/17 13:31

kei344

総合スコア69400

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問