- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,我快到了。下面的脚本获取 PHP SQL 查询的输出,并在结果中的每个点创建多个标记。
输出字符串 (liste_des_points) 如下所示:
[43.818298,-69.809998, "Phippsburg, Kennebec River, Maine"],[43.755001,-69.785004, "Fort Popham, Hunniwell Point, Kennebec River, Maine"]
最后一步(我无法完成)是,当用户单击标记时,它将通过在底部的三个 HTML 输入字段中显示信息窗口内容来确认选择;单击不同的标记,输入字段的内容会发生变化。
我发现我需要使用类似的东西:
document.getElementById('txtLat').value = liste_des_points[i][0];
document.getElementById('txtLng').value = liste_des_points[i][1];
document.getElementById('tideStation').value = (liste_des_points[i][2]);
但无法确定将其集成到现有脚本中的位置。
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html {
height: 100%
}
body {
height: 100%;
margin: 0;
padding: 0
}
#map_canvas {
height: 100%
}
</style>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=MY_API_KEY">
</script>
<script type="text/javascript">
var infos = [];
function initMap() {
var optionsCarte = {
center: new google.maps.LatLng(<?php echo $lat; ?>, <?php echo $lon; ?>),
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), optionsCarte);
var myicon = "images/tidesicons-line-32.ico";
var liste_des_points = [<?php echo $listeDesPoints;?>];
var liste_des_points_Station = [<?php echo $listeDesPointsStation;?>];
var i = 0,
li = liste_des_points.length;
var infowindow = new google.maps.InfoWindow();
currentPopup = infowindow;
/* set the markers */
while (i < li) {
new google.maps.LatLng(liste_des_points[i][0]);
new google.maps.LatLng(liste_des_points[i][1]);
new google.maps.LatLng(liste_des_points[i][2]);
marker = new google.maps.Marker({
position: new google.maps.LatLng(liste_des_points[i][0], liste_des_points[i][1]),
map: map,
icon: myicon,
});
var content = liste_des_points[i][0] + " ; " + liste_des_points[i][1] + " ; " + liste_des_points[i][2];
i++;
google.maps.event.addListener(marker, 'click', (function(marker, content, infowindow) {
return function() {
/* close the previous info-window */
closeInfos();
infowindow.setContent(content);
infowindow.open(map, marker);
/* keep the handle, in order to close it on next click event */
infos[0] = infowindow;
};
})(marker, content, infowindow));
}
}
function closeInfos() {
if (infos.length > 0) {
/* detach the info-window from the marker ... undocumented in the API docs */
infos[0].set("marker", null);
/* and close it */
infos[0].close();
/* blank the array */
infos.length = 0;
}
}
</script>
<title>Search NOAA Stations by ZIPcode</title>
</head>
<div align="center">
<body onLoad="initMap()">
<div id="map_canvas" style="width:50%; height:50%"> </div>
</div>
<hr size=".5" width="75%" />
<div align="center">
<div>
<form action="output.php" method="get" name="locationinfo">
<table cellpadding="3" cellspacing="3" align="center" width="40%">
<tr>
<th colspan="2" align="center">You selected the tide station shown below.<br />If this not correct, click on another one in the map to change the selection</th>
</tr>
<tr>
<th colspan="2" align="center">When you click on the "Create Calendar Files..." link you will generate the files for the tide station you selected which will be used to create your calendar.</th>
</tr>
<tr>
<td colspan=3>
<div id="map_canvas" style="background-color: #ffffff"></div>
</td>
</tr>
<tr>
<td>Latitude:</td>
<td><input type="text" id="txtLat" name="txtLat" width="70" size="40"></td>
<tr>
<td>Longitude:</td>
<td><input type="text" id="txtLng" name="txtLng" width="70" size="40"></td>
</tr>
<tr>
<td>Location:</td>
<td><input type="text" id="tideStation" name="txtDesc" width="100" size="40"></td>
</tr>
<tr>
<td align="center" colspan="2"><input type="submit" value="Create Calendar Files..."> <INPUT type="reset" value="Clear Entry"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
最佳答案
修复现有代码的最简单方法是在标记“click”监听器函数中的 i
上添加函数闭包,并将设置表单中的值的代码放入其中:
google.maps.event.addListener(marker, 'click', (function(marker, content, infowindow, i) {
return function() {
/* close the previous info-window */
closeInfos();
infowindow.setContent(content);
infowindow.open(map, marker);
document.getElementById('txtLat').value = liste_des_points[i][0];
document.getElementById('txtLng').value = liste_des_points[i][1];
document.getElementById('tideStation').value = (liste_des_points[i][2]);
/* keep the handle, in order to close it on next click event */
infos[0] = infowindow;
};
})(marker, content, infowindow, i));
i++;
代码片段:
html {
height: 100%
}
body {
height: 100%;
margin: 0;
padding: 0
}
#map_canvas {
height: 50%
}
<script>
var infos = [];
function initMap() {
var optionsCarte = {
center: new google.maps.LatLng(43.818298, -69.809998),
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), optionsCarte);
var liste_des_points = [
[43.818298, -69.809998, "Phippsburg, Kennebec River, Maine"],
[43.755001, -69.785004, "Fort Popham, Hunniwell Point, Kennebec River, Maine"]
];
//var liste_des_points_Station=[<?php echo $listeDesPointsStation;?>];
var i = 0,
li = liste_des_points.length;
var infowindow = new google.maps.InfoWindow();
currentPopup = infowindow;
/* set the markers */
while (i < li) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(liste_des_points[i][0], liste_des_points[i][1]),
map: map,
});
var content = liste_des_points[i][0] + " ; " + liste_des_points[i][1] + " ; " + liste_des_points[i][2];
google.maps.event.addListener(marker, 'click', (function(marker, content, infowindow, i) {
return function() {
/* close the previous info-window */
closeInfos();
infowindow.setContent(content);
infowindow.open(map, marker);
document.getElementById('txtLat').value = liste_des_points[i][0];
document.getElementById('txtLng').value = liste_des_points[i][1];
document.getElementById('tideStation').value = (liste_des_points[i][2]);
/* keep the handle, in order to close it on next click event */
infos[0] = infowindow;
};
})(marker, content, infowindow, i));
i++;
}
}
function closeInfos() {
if (infos.length > 0) {
/* detach the info-window from the marker ... undocumented in the API docs */
infos[0].set("marker", null);
/* and close it */
infos[0].close();
/* blank the array */
infos.length = 0;
}
}
</script>
<div id="map_canvas"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap"></script>
<div align="center">
<div id="map_canvas" style="width:50%; height:50%"> </div>
</div>
<hr size=".5" width="75%" />
<div align="center">
<div>
<form action="output.php" method="get" name="locationinfo">
<table cellpadding="3" cellspacing="3" align="center" width="40%">
<tr>
<th colspan="2" align="center">You selected the tide station shown below.<br />If this not correct, click on another one in the map to change the selection</th>
</tr>
<tr>
<th colspan="2" align="center">When you click on the "Create Calendar Files..." link you will generate the files for the tide station you selected which will be used to create your calendar.</th>
</tr>
<tr>
<td colspan=3>
<div id="map_canvas" style="background-color: #ffffff"></div>
</td>
</tr>
<tr>
<td>Latitude:</td>
<td><input type="text" id="txtLat" name="txtLat" width="70" size="40"></td>
<tr>
<td>Longitude:</td>
<td><input type="text" id="txtLng" name="txtLng" width="70" size="40"></td>
</tr>
<tr>
<td>Location:</td>
<td><input type="text" id="tideStation" name="txtDesc" width="100" size="40"></td>
</tr>
<tr>
<td align="center" colspan="2"><input type="submit" value="Create Calendar Files...">
<INPUT type="reset" value="Clear Entry">
</td>
</tr>
</table>
</form>
</div>
关于javascript - 如何将 map Infowindow 值传递到 HTML 输入表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54154147/
我已经使用 jquery 删除了 google map 的 infoWindow 的关闭按钮,但是无法获取 infoWindow 宽度来进行计算以使文本位于 InfoWindow 的中心。 移除关闭按
我很确定这在很长一段时间内都不是 Google Maps API 的默认行为,但与此同时它肯定已经改变了。 我修改了google提供的Fiddle:https://developers.google.
我遇到了一个奇怪的问题。 infowindow.js 中显示 f = undefined。但我什至没有文件 infowindow.js...当我单击它时就会发生这种情况。它必须显示信息窗口,但它没有。
我在向标记添加信息窗口时遇到了问题。虽然它们看起来都很好,如果我点击它们,窗口就会出现,我似乎遇到了一个错误,我不知道它想要什么。 问题在于,当我单击标记时,会出现包含所有信息的窗口。我收到一个:“U
我在下面的代码中找不到错误,但它显示所有信息窗口的相同内容。 $('#map').gmap({'zoom': 2, 'disableDefaultUI':true}).bind('init', fun
我想将鼠标悬停在标记上时的信息窗口聚焦。只要他停留在信息窗口上,窗口就会打开。下面是我的代码 content=""+j+"."+obj.identifier+"'>"+obj.company.subs
我正在使用 GMaps在我的网站上显示 map 。使用信息窗口创建 map 非常容易。但是,信息窗口仅在单击标记时出现。 我的Javascript: var map; $(document).read
我运行以下代码以在与我的 GeoLocation 标记分开的数组中显示 map 上的标记。创建一个简单的外部链接很容易,但我如何在数组标记中创建相同的外部链接,以及这在 IE 中不起作用的任何原因?
通常我的 map 上有很多标记(比如代表商店)。我有显示标记所代表的商店基本信息的信息窗口,然后,我想在信息窗口 HTML 上放置一个按钮,例如,显示“详细信息”。信息窗口的 html 很简单。信息窗
我正在使用这个非常基本的代码来使 InfoWindow 成为“单例”并在需要时打开它。 (在 iOS5 上的 UIWebView 中) google.maps.event.addListener(ma
目前,当用户单击我们 map 屏幕上的位置标记时,将调用页面方法以从服务器检索附加信息。当 page 方法成功时,结果用于定义显示在 map 上的 infoWindow 的内容。在 page 方法很慢
我实现了一个选项来找到离实际位置最近的标记。我在带有自定义信息窗口的 ClusterItem 中拥有所有标记。在没有聚类的普通谷歌地图上,我可以只使用 marker.showInfoWindow();
我有以下代码,但每次我尝试添加一个按钮时它都不起作用。 有人可以告诉我如何添加一个在点击时显示警告框的按钮吗? var infowindow = new google.maps.InfoWindow(
我正在尝试向路线添加信息窗口。有很多示例可以在标记上的事件监听器上添加 InfoWindow。 但是我怎样才能移动信息窗口以显示在从一个标记到另一个标记的实际计划路线上。之前已经有人试过问这个问题,但
我在click 上设置了一个监听器,以获取我未创建 GoogleMaps (V3 API) 的标记。单击它时,我首先使用一些简单的纯 HTML 和“正在加载”gif 加载信息窗口。 然后我调用一个方法
我正在使用谷歌地图 API 来绘制事件列表。事件有事件举办地点的坐标。大多数场馆都会举办不止一场事件。如何在一个信息窗口中显示具有相同坐标的所有事件。 var locations = [ ['ev
我有一张 map ,我一直试图找出将信息窗口添加到数组中的标记,但我被卡住了。使用单个 map 和单个标记,我可以毫无问题地添加信息窗口。但在我的一生中,我无法让信息窗口在我的数组中工作。如果有人能帮
我从 mysql 数据库获取坐标,如下所示 (, ) (, ) 当我绘制 map 时,它会显示两个点和方向,如下面的代码所示 function initialize() { var m
如何循环关联数组的值?现在我一次只能参加一个协会!在这里,我将 MySQL 表中的所有值传递给 json_encode,仅将纬度和经度作为数组的数组以及其他字符串。谢谢 function myMap(
所以我一直在使用 google-maps-react现在几个月了,一切正常,现在只有一点我不明白。这可能就是我无法实现这一目标的原因。 这是我的 的结构: {this.state
我是一名优秀的程序员,十分优秀!