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

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

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

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

Q&A

解決済

2回答

5189閲覧

JavaScriptにおいて、forとifを組み合わせたコードが上手くいかない!!

Shinog

総合スコア99

JavaScript

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

0グッド

0クリップ

投稿2015/08/11 16:22

はじめまして!

現在、for構文を利用したコードにif構文を入れこみたいと考えており、以下のようにif構文を追加したのですが、上手く機能しません。

このような場合どのような処置をとればよいでしょうか?

是非ともご教授のほどよろしくお願い申し上げます。

javascript

1downloadUrl("http://略", function(data) { 2 var xml = data.responseXML; 3 var markers = xml.documentElement.getElementsByTagName("marker"); 4 for (var i = 0; i < markers.length; i++) { 5 // if (markerType == markers[i].getAttribute("type")) { 6 var name = markers[i].getAttribute("name"); 7 var address = markers[i].getAttribute("address"); 8 var type = markers[i].getAttribute("type"); 9 var point = new google.maps.LatLng( 10 parseFloat(markers[i].getAttribute("lat")), 11 parseFloat(markers[i].getAttribute("lng"))); 12 var html = "<b>" + name + "</b> <br/>" + address; 13 var icon = customIcons[type] || {}; 14 var marker = new google.maps.Marker({ 15 map: map, 16 position: point, 17 icon: icon.icon 18 }); 19 20 bindInfoWindow(marker, map, infoWindow, html); 21 // } 22 } 23 }); 24}

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

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

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

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

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

guest

回答2

0

ベストアンサー

なんとなくgoogleMapのAPIからXMLを取得して表示したいのかな?と思いました。

  1. 問題となっているif文がない状態では意図した通り動作していますでしょうか?
  2. 1がYESの場合完全にif文に問題があると考えられます。Noの場合はそれ以外の部分が問題なので個別の処理ごとにチェックしてどこに問題があるか探す必要があります。

LLmanさんがおっしゃられている通り変数markerTypeが示されているコード内では定義されていないようです。
Chromeで見ているのであればメニューバーの表示 > 開発/管理 > javascriptコンソールを選択してみてください。表示されたコンソールに
Uncaught ReferenceError: markerType is not defined
と表示されていないでしょうか?

このエラーが表示されている場合は 変数markerType が定義されていないのが原因でエラーを起こしてしまっているのが原因になります。**markers[i].getAttribute("type")**で取得できる属性で判定したい属性の文字列を前もってこの変数に定義してあげれば問題なくなるかと思います。

javascript

1// 前略 2 var markerType = 'マーカータグのtype属性で取得したい値を指定'; 3 for (var i = 0, l = markers.length; i < l; i+=1) { 4 if (markerType == markers[i].getAttribute("type")) { 5 // 略 6 } 7 }

既に別のところで変数markerTypeを定義しているのであれば、
**markers[i].getAttribute("type")**で取得できている値が期待できているものでない可能性が高いです。

javascript

1// 前略 2 for (var i = 0, l = markers.length; i < l; i+=1) { 3 // コンソールなどで何が取得できているか表示して確かめてみてはいかがでしょう? 4 console.log( markers[i].getAttribute("type") ); 5 if (markerType == markers[i].getAttribute("type")) { 6 // 略 7 } 8 }

また、先ほどの開発者ツールのNetworkタブを開けば、name下のリスト内に取得されているxmlがあると思いますので、それをクリックしてみてください。取得できているXMLが右のエリアに表示されると思います。
<marker>タグを探して、そこに期待されるtype="なんとか"が存在するのか確かめてみてはいかがでしょう?もしかすると判別したかったのはtype属性ではなかったという可能性もあるかもしれませんので。

投稿2015/08/11 17:33

KiKiKi_KiKi

総合スコア596

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

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

Shinog

2015/08/11 23:41

親切丁寧なご回答ありがとうございました! KiKiKi_KiKiさんのおっしゃる通り、 変数markerType が定義されていないのが原因でエラーを起こしてしまっているのが原因でした。 本当に初歩的なミスですが、「var markerType」 = のあとに「' '」を付けていなかったことが問題だったようです(> <) 本当にありがとうございます!!
guest

0

// if (markerType == markers[i].getAttribute("type")) { // }

コメントアウトされた上の行を足しても、
意図通り動作しないということですか?

if文の中で比較している「markerType」の宣言文が
質問文の範囲にはありませんが、値は何が入っているのでしょうか?

もし、コメント部分のifはサンプルのつもりで書いていて、
実際にエラーが起きたときと違う内容になっていたとしたら、
その実際に使ったほうのif文も書いてください。

そもそもif文で何をしたいのかの説明も欲しいです。

投稿2015/08/11 16:42

編集2015/08/11 17:36
LLman

総合スコア5592

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問