谷歌地图 v3 的 PHP javascript 关闭问题

标签 php javascript jquery google-maps-api-3

我的应用程序在从 MySQL 数据库读取的 map 上绘制了一堆标记,并且我想在每个信息窗口中显示一些内容。我的问题是信息窗口将只显示我的数据库中最后一个条目的内容。下面是我的代码,我只是尝试显示位置的名称。我尝试向变量发出警报,看看它们是否确实显示了正确的内容。我意识到这是一个 javascript 关闭问题,但我不知道如何解决这个问题。

var startLat;
var startLng;
var locationName;

<?php foreach($workstations as $workstation):?>
    startLat = "<?php echo $workstation['lat']?>";
    startLng = "<?php echo $workstation['lng']?>";
    locationName = "<?php echo $workstation['name']?>";

    var marker = new google.maps.Marker({
        position: new google.maps.LatLng(startLat, startLng),
        map: map,
        icon: "images/purple.png"
    });

    //load all the infowindow content
    var contentString = [
                    '<div id="InfoText" style="margin: 0px; padding: 0px; overflow: hidden; border:0px">',
                    '<div class="tabs"><ul><li><a href="#tab1">General</a></li>',
                    '<li><a href="#tab2">General 2</a></li></ul>',
                    '<div id="tab1">',
                    '<b>' + locationName + '</b> - ' + locationName + '<BR>',
                    '<input id="save" type="submit" value="Reserve Today" onclick="saveStation(addMarker)" />',
                    '</div>',
                    '<div id="tab2">',
                    '</div>',
                    '</div>'
                           ].join('');

    //alert(contentString);
    var infowindow = new google.maps.InfoWindow({content: contentString});

    new google.maps.event.addListener(marker, 'click', (function(marker) {
        return function(){
            infowindow.open(map, marker);
            }
        })(marker));
<?php endforeach;?>

最佳答案

是的。这是一个js关闭问题。您有一个变量“标记”,所有 map 事件监听器都指向该变量。试试这个:

将其放在顶部(在 foreach 循环之前):

function addMarkerListener( mark, mp, win )
{
    new google.maps.event.addListener(
          mark, 
          'click', 
          function(){win.open(mp,mark)}
}

然后,在代码块末尾添加以下监听器:

addMarkerListener( marker, map, infowindow );

基本上,您的版本中发生的情况是 js 说:“好吧,我将创建一个函数并让标记变量填充它。明白了。”当实际调用该函数时,它会说:“我正在寻找变量‘标记’,该变量中有什么?”不幸的是,它同时被重新分配,现在它代表最新分配。

另一方面,这里的版本告诉JavaScript,“我有这些全新的变量,它们只存在于这里,所以不要在其他地方寻找它们。当其中一个被单击时,然后显示相关的值到它。”单击该项目时,JS 会说:“嗯...这个变量仅被指定在这种情况下使用,所以我想我会使用它。”

我可以讨论变量绑定(bind),其中涉及一些令人兴奋的 Lambda 演算内容,但这对于这个范围来说有点太多了。

关于谷歌地图 v3 的 PHP javascript 关闭问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6319403/

相关文章:

javascript - 谷歌地图。以有效的方式使用 PHP 变量创建大量 infoWindow

jquery - 为什么 jquery 加载第二个,即使它是在 mvc bundle 配置文件的第一个位置定义的?

javascript - 如何在不禁用所有文本选择的情况下使用 shift 禁用文本选择?

php - 如何传递多对多关系以查看数组[Laravel 5]

php - 如何禁止所有使用 markdown 的 HTML(PHP 和 JS)?

php - 我应该在 php 中验证/清理 $_SESSION 变量吗?

javascript - 如何在 rails 变量中获取 Javascript 变量

javascript - Webgl 在浏览器中抛出不同的错误

javascript - 根据相同的 JSON 键值获取值

javascript - 通过 ajax 加载 DIV 内容作为 HTML