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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2089閲覧

GoogleMAPで吹き出しをつけたい

k0908

総合スコア102

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/05/15 11:08

編集2018/05/15 12:57

GoogleMAP APIを使っている。表示してあるGoogleMAPのピンをクリックした時吹き出しが出るようにしたい。

var marker = []; var infoWindow = []; function initMap() { for (var i = 0; i < data.length; i++) { markerLatLng = new google.maps.LatLng(data[i]); marker[i] = new google.maps.Marker({ position:markerLatLng, map: map }); var infoWindow; infoWindow = new google.maps.InfoWindow({ content: '<div class="sample">test</div>' }); marker[i].addListener('click', function() { infoWindow.open(map, marker); }); } }

とコードを書いた。ピンは目的の位置に描画されたが、ピンをクリックしても吹き出しが出なかった。Uncaught TypeError: b.get is not a function とエラーが出た。

var marker = []; var infoWindow = []; function initMap() {        for (var i = 0; i < data.length; i++) { var markers = data.map(function(location) { return new google.maps.Marker({ position: location, map:map, icon:pinImage }); });        markerEvent(data[i]); } function markerEvent(i) { marker[i].addListener('click', function() { infoWindow[i].open(map, marker[i]); }); } }

とコードを書いた時は、open is defined とエラーが出た。

どう直せば良いのか?

参考URL:
http://www.googleappsscript.info/2018-03-25/map_show_map_marker.html
https://www.tam-tam.co.jp/tipsnote/javascript/post7755.html

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

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

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

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

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

Lhankor_Mhy

2018/05/15 11:28

2番目のコードで、for文がなくなっていたり、infoWindow変数に代入がされていないのは、コピペミスですか?
k0908

2018/05/15 12:16

いえ、コピペミスではないです。このコードを書いていました
k0908

2018/05/15 12:16

書き方が何通りかあるのだと思います
Lhankor_Mhy

2018/05/15 12:19

このとおりだとすると、i 変数はどのように定義されていますか?
k0908

2018/05/15 12:57

すみません、やっと意味がわかりました。コードを修正いたしました。もしお分かりでしたらお願いします
Lhankor_Mhy

2018/05/16 00:23

いえ、別に修正をしていただかなくてもよかったです。実際に動かしているコードとご質問のコードが違うと、回答しても話が通じなくなるので、確認をしたかっただけです。
guest

回答2

0

ひとつ目の問題に、for文でループを組むなら、data.map()で配列を作る必要はない。このやり方だと、一種の二重ループ。
解決方法は、marker変数の処理は一番目のコードに戻すこと。

ふたつ目の問題は、infoWindow変数に代入がないこと。吹き出しを作るのはnew google.maps.InfoWindow()
解決方法は、infoWindow変数の処理は一番目のコードに戻して、配列に収めること。

みっつ目は、 markerEvent()関数は、配列の添え字を引数に取るので、markerEvent(data[i]);という呼び出しはおそらく間違い。
解決方法は、修正前の方がおそらく合っているので、戻すこと。

以上。

投稿2018/05/16 00:35

Lhankor_Mhy

総合スコア36074

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

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

k0908

2018/05/16 02:09

ありがとうございます。解決方法は、infoWindow変数の処理は一番目のコードに戻して、配列に収めること。 の部分がよくわかりませんでした。 どのように配列に収めるのか例えばのコードを書いてもらえませんか?よろしくお願いいたします
Lhankor_Mhy

2018/05/16 02:17

動くコードがほしい、ということでしたら、sousukeのご回答で十分かと。
guest

0

ベストアンサー

変数の使い回しでおかしくなるので関数分割してスコープ分けるのはいいと思うんですが
全体的に書き換え過ぎていると思います。
私も修正前のコードから関数外出しで直すほうがいいかなと思います。(提示のコードは未検証)

javascript

1function initMap() { 2 for (var i = 0; i < data.length; i++) { 3 setMW(data[i]); 4 } 5} 6 7function setMW(LatLng){ 8 var markerLatLng = new google.maps.LatLng(LatLng); 9 var marker = new google.maps.Marker({ 10 position:markerLatLng, 11 map: map 12 }); 13 14 var infoWindow = new google.maps.InfoWindow({ 15 content: '<div class="sample">test</div>' 16 }); 17 18 marker.addListener('click', function() { 19 infoWindow.open(map, marker); 20 }); 21} 22

投稿2018/05/16 01:01

sousuke

総合スコア3828

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問