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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

Q&A

2回答

766閲覧

Google Map Apiを用いて現在地から登録された住所への経路を表示させたい。

Yn_26247

総合スコア16

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

0グッド

0クリップ

投稿2020/10/09 06:40

ラーメンの口コミを登録するサイトを作っています。
押すとMAPが現在地に移動するボタンと
登録された店の場所にMAP上でピンを立て、ピンの中のボタンを押すと現在地からの経路を検索してくれる機能を実装しようとしています。

//現在地取得 document.getElementById('getcurrentlocation').onclick = function() { geoLocationInit(); } function geoLocationInit() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(success, fail); } else { createMap(pyrmont); } } // success function success(position) { var currentLat = position.coords.latitude; var currentLng = position.coords.longitude; var pyrmont = new google.maps.LatLng(currentLat,currentLng); createMap(pyrmont) var currentMarker = new google.maps.Marker({ position: pyrmont, map: map, icon: { url: '/assets/move.png', scaledSize: new google.maps.Size(30, 30) }, }) currentMarker.setMap(map); } // fail function fail(pyrmont) { createMap(pyrmont); } // map表示 function createMap(pyrmont) { map = new google.maps.Map(document.getElementById('map'), { center: pyrmont, zoom: 18 }); // var currentPos = new google.maps.LatLng(currentLat, currentLng); var currentMarker = new google.maps.Marker({ position: pyrmont, map: map, icon: new google.maps.MarkerImage( '/assets/move.png', new google.maps.Size(80,50), ), }); currentMarker.setMap(map);    ///ピンを立てる <% @shops.each do |s| %> (onload = function(){ var contentString = "住所:<%= s.address %>" var marker = new google.maps.Marker({ position:{lat: <%= s.latitude %>, lng: <%= s.longitude %>}, map: map, title: contentString }); infoWindow = new google.maps.InfoWindow({ // 吹き出しの追加 content:'<%= link_to s.name, shop_path(s) %><input type="button" value="ここに行く" calcRoute()">' // 吹き出しに表示する内容 }); marker.addListener('click', function() { // マーカーをクリックしたとき infoWindow.open(map, marker); // 吹き出しの表示 }); // ここからルートを取得、表示 document.getElementById('calcRoute').onclick = function() { var request = { origin: currentLat+','+currentLng, //現在地(必須)。経度緯度かテキスト入力。 destination: <%= s.latitude %>+','+<%= s.longitude %>, //目的地(必須)。経度緯度かテキスト入力。 travelMode: google.maps.DirectionsTravelMode.WALKING, //交通手段(必須 avoidHighways: false, //高速道路を使うかどうか。trueだと高速道路を可能な限りルートの計算から除外 avoidTolls: false //有料道路を使うかどうか。trueだと有料道路を可能な限りルートの計算から除外 }; directionsService.route(request, function(response,status){ if (status == google.maps.DirectionsStatus.OK){ directionsDisplay.setDirections(response); } }); } })(); <% end %> } }

しかし、現在地を取得するボタンを押すと

document.getElementById('calcRoute').onclick = function() {

に対してCannot set property 'onclick' of nullとエラーが出てしまいます。
いろいろ調べて試してみたのですがうまくいかないので、どなたかアドバイスいただけると幸いです。

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

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

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

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

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

guest

回答2

0

エラー内容は単純にdocument.getElementById('calcRoute') = nullになっている、というものなので、id="calcRoute"となる要素が存在するか、もしくはjavascriptが読み込まれる際に該当要素が読み込まれているか*1、一度確認してみてください。

*1: 例えばjavascriptを<header>部に記述すると、要素を読み込む前にonclickを付けようと試みるため、エラーとなる事があります。

投稿2020/10/09 07:26

yuuyu

総合スコア1139

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

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

0

質問者様

ピンの中のボタンを押すと現在地からの経路を検索してくれる機能

しかし、現在地を取得するボタンを押すと

ピン=現在地=マーカの認識で合っていますでしょうか?

まず

javascript

1document.getElementById('calcRoute')

Google Mapの範囲でいえばid="calcRoute"は見つける事ができませんした。
Google Map外に用意されたボタンなのでしょうか?

また現在

javascript

1marker.addListener('click', function() { // マーカーをクリックしたとき 2 infoWindow.open(map, marker); // 吹き出しの表示 3});

という機能がすでに実装されているように見受けられます。
もし「マーカをクリックした際現在地からの経路を検索してくれる機能」であるなら
こちらに処理を記載されては?

投稿2020/10/09 07:25

kuma_kuma_

総合スコア2506

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

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

Yn_26247

2020/10/09 08:19

説明不足ですみません、現在地を取得するボタンは <button id="getcurrentlocation" type="button" class="cl〜〜>として別で作っています。 店舗が登録されている場所にマーカーを、 マーカーを押した時に表示されるウィンドウに追加された <input type="button" value="ここに行く" calcRoute()">をクリックすると現在地からマーカーまでの経路表示させたいと考えています。calcRoute()をid="calcRoute"に変えても問題は解決しませんでした。 説明が下手でもうしわけありません。
kuma_kuma_

2020/10/09 08:25 編集

> マーカーを押した時に表示されるウィンドウに追加された ><input type="button" value="ここに行く" calcRoute()"> このinputタグにはid="calcRoute"の指定がまずありません。 ><input type="button" value="ここに行く" id="calcRoute"> 後からイベントを追加するのであればこの様な記述が必要です。 またclickイベント表記で実行されたいのであれば ><input type="button" value="ここに行く" calcRoute()"> ではなく ><input type="button" value="ここに行く" onclick="calcRoute()"> となります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問