我的网页中包含一个<script type="text/javascript">
。这个脚本为我的谷歌地图定义了Markers
。此页面中包含的另一个脚本是从另一个.js
文件中引用的。我需要在单独的JS文件中编写的第二个脚本中,根据某些条件动态更改标记的图标。
实际上,在第一页中,我使用PHP从数据库表中读取数据。然后使用这些数据编写类似的PHP语句
echo '<script>';
echo 'function initMap() {';
//.... code code
echo 'var marker'. $recordIdFromDb .' = new google.maps.Marker({position:{lat: '.$recordData["lat"].', lng: '.$recordData["lng"].'}, map:map, icon: greenIcon});';
假设上面PHP代码中的最后一条语句打印到网页中:
var markerXYZ123 = new google.maps.Marker({position:{lat:123, lng:456}, map:map, icon: greenIcon})
现在,在第二个脚本中,我正在进行一些处理,因此,我首先更新数据库表记录中的一些字段,该表是上述第一个脚本中数据的来源。
然后,在第二个脚本中,我从同一个数据表中提取数据。然后,根据某些条件,我必须更改标记的图标。为此,我将不得不使用类似的声明
markerXYZ123.setIcon(blah blah);
如上所述,标记名称的XYZ123
后缀实际上是数据库中该记录的id
在第二个脚本中,我有这个id
。我需要动态地形成标记变量的名称。类似
("marker" + "XYZ123").setIcon(blah blah);
我该怎么做?如何在Javascript中动态地形成这个变量名?
使用由id
索引的对象,而不是动态变量名。例如,在您的第一个脚本中:
const markers = {};
markers[<?= $recordIdFromDb; ?>] = new google.maps.Marker({
position: {
lat: <?= $recordData["lat"] ?>,
lng: <?= $recordData["lng"] ?>,
},
map,
icon: greenIcon,
});
然后在另一个脚本中,只需再次使用recordIdFromDb
来访问markers
对象中的适当密钥:
markers["XYZ123"].setIcon(...