【发布时间】:2016-03-13 23:26:24
【问题描述】:
我想要在谷歌地图标记上打开相应信息窗口的各种按钮。我看过像THIS 这样的答案,但它们没有动态创建的内容。我从我的数据库中获取多个位置并在页面上显示它们。他们有我添加到按钮的 ID。我还在标记中添加了相应的 ID(如 HERE 所示)。
现在我只需要使用正确的 id 触发正确的标记。我认为我的问题与范围有关,但我有点迷茫。使用 Laravel 5。
代码都在一个名为 index.blade.php 的页面上。用户以地理编码为 lat/lng 的形式输入地址,然后使用 Articles Controller 在 index.blade.php 上显示最近的文章/商店。
代码:
@extends('template')
@section('content')
@foreach ($articles as $article)
<i class="fa fa-plus-square showMoreDetails" onclick="myClick({{$article->id}});"></i>
@endforeach
@stop
@section('footer')
<script>
var barTitle = [
@foreach($articles as $article)
"{{$article->title}}" ,
@endforeach
];
var barDeal = [
@foreach($articles as $article)
"{{$article->deal}}" ,
@endforeach
];
var infoWindowContent = [];
var markers = [];
var i, marker;
function initialize() {
var map_canvas = document.getElementById('map_canvas');
var myLatlng = new google.maps.LatLng(parseFloat({{ $article->lat }}),parseFloat({{ $article->lng }}));
var map_options = {
center: myLatlng,
zoom: 15,
zoomControl: true,
zoomControlOptions: {
position: google.maps.ControlPosition.BOTTOM_RIGHT
},
scaleControl: true,
panControl: true,
panControlOptions:{
position: google.maps.ControlPosition.BOTTOM_LEFT
},
mapTypeControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(map_canvas, map_options);
var locations = [
@foreach($articles as $article)
[{{$article->lat}}, {{$article->lng}}],
@endforeach
];
var barID = [
@foreach($articles as $article)
{{$article->id}},
@endforeach
];
for (i = 0; i < locations.length; i++) {
infoWindowContent[i] = getInfoWindowDetails(locations[i]);
var location = new google.maps.LatLng(locations[i][0], locations[i][1]);
var marker = new google.maps.Marker({
position: location,
map: map,
id: barID[i],
icon: 'images/happymarker.png'
});
var infowindow = new google.maps.InfoWindow()
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
// infowindow.setContent(barTitle[i]);
infowindow.setContent(infoWindowContent[i]);
infowindow.open(map, marker);
map.panTo(marker.getPosition());
map.setZoom(17);
}
})(marker, i));
markers.push(marker);
}
}
function getInfoWindowDetails(location){
var contentString = '<div id="infoWindowBox">' +
'<h3 id="firstHeading" class="infoWindowTitle">' + barTitle[i] + '</h3>'+
'<div id="bodyContent">'+
'<div>'+ barDeal[i] + '</div>'+
'</div>'+
'</div>';
return contentString;
}
google.maps.event.addDomListener(window, "load", initialize);
function myClick(id){
google.maps.event.trigger(markers[id], 'click');
}
</script>
@stop
我的 template.blade.php 页面加载地图如下:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=MYKEY&signed_in=true&libraries=places"></script>
文章管理员:
public function index(Request $request)
{
$lat = $request->get('lat');
$lng = $request->get('lng');
$distance = 1;
$categoryChoice = $request->get('categoryList');
$query = Article::distance($lat, $lng, $distance)
->whereHas('categories', function ($query) use ($categoryChoice) {
$query->whereIn('categories.id', $categoryChoice);
})->get();
$articles = $query;
if(count($articles) == 0)
{
return redirect()->action('HomeController@index');
}
return view('articles.index', compact('categories', 'articles', 'days'));
}
【问题讨论】:
-
这与Click button to show Gmaps info window with dynamically created locations 有何不同?你能提供一个Minimal, Complete, Tested and Readable example 来证明这个问题吗?你的
myClick函数对我来说没有任何意义,id == markers[i]怎么会是真的? -
您好,我不确定如何删除该问题。而且我不确定为什么它被否决,所以我创造了一个我认为措辞更好的问题。我再次改写了这个问题。我对 myClick 函数的尝试是我出错的地方,但我不知道该怎么做。抱歉 JS 水平低。
-
你能提供一个Minimal, Complete, Tested and Readable example 来证明这个问题吗?发布的代码不会按原样运行。
-
怎么样?还是更糟?
标签: javascript google-maps laravel-5