【问题标题】:Adding a JavaScript function to a repeat region in PHP将 JavaScript 函数添加到 PHP 中的重复区域
【发布时间】:2014-01-09 23:01:15
【问题描述】:

我在网页上有一个区域(定义为 div),显示来自数据库的有关人员的各种信息。我在数据库上有一个重复区域,为数据库中的每个用户生成一个新的 div。

我想做的是在这些区域中的每一个区域都有一个谷歌地图,从存储在数据库中的邮政编码中显示用户的确切位置。我在第一个领域实现了这一点,但这只是因为我正在调用该函数:

google.maps.event.addDomListener(window, 'load', initialize);

所以我只在页面加载时调用该函数一次(正确吗?)。

另外,当我将包含地图<div id="map-canvas"> 的 div 的名称传递给 google 函数时,我想我必须为每个区域创建一个唯一的 ID,以便 google 函数知道它指的是哪个 div。我该如何做到这一点,以及如何为每个重复区域区域包含“函数调用”以便为每个区域创建一个新地图?

【问题讨论】:

    标签: javascript php html google-maps


    【解决方案1】:

    是的,您必须为每个映射创建一个div(并且每个映射具有不同的id)。你可以像这样重用一些代码:

    1. 创建一个具有地图通用属性的对象(我假设它们将具有一些通用属性,例如zoom 或mapTypeId):

      var mapOptions = {
          zoom: 10,
          mapTypeId: google.maps.MapTypeId.TERRAIN 
      };
      
    2. 然后是你的 PHP 循环:

      $i = 0;
      while (@extract(mysql_fetch_assoc($resource)))
      {
          // Javascript code
          ?>
          var newOptions = mapOptions;
          newOptions["center"] = new google.maps.LatLng(<?php echo "$lat, $lng"; ?>);
          var map<?php echo $i; ?> = new google.maps.Map(document.getElementById('map<?php echo $i; ?>'),
        newOptions);
          <?php
      
          // HTML elements
          <?php echo "<div id='map$i'></div>"; ?> 
          $i++;
      }
      

    当然这些代码只是一个例子,因为我不知道你的代码,所以你必须根据自己的需要进行调整。

    【讨论】:

    • 所以你上面提到的javascript代码(包括php代码),如何将信息与我之前定义的函数关联/中继?我问的原因是该功能不仅仅是创建地图(例如获取邮政编码,对其进行地理编码,在其周围添加一个 10 公里半径的圆圈)。
    • 强制执行最大显示区域数规则后,您可以在页面加载时创建画布并稍后更改实际地址(例如从 Ajax 请求中获取个人数据)。例如,如果您允许浏览人员列表,则可以节省一些页面闪烁。
    • @Giovanni 对不起老兄,我没明白你的意思(kuroi 都没有)我的英语很糟糕。
    • JS对象只是为了简化常用属性。无论您想通过数据库添加什么,您都可以按照我设置的center 进行设置。您也可以使用 Ajax,但我认为一旦它不依赖于任何用户操作,它就没有任何用处,因此您可以直接将其加载到正文中。我想它会更快。
    • @Giovanni 有什么进展吗?
    【解决方案2】:

    您必须将每个地图显示区域绑定到 Google 引擎,但是一旦完成,您就可以随意更改显示区域而无需重新创建 div。

    此外,我假设您可以在单个页面上显示的地图数量存在物理限制。

    所以也许您可以创建,例如,六个预先初始化的地图区域,并使用它们来显示您当前关注的任何人的位置?从地址显示位置只需要一个调用。

    【讨论】:

    • 这很有趣,我还没有考虑限制。
    • 我正在调查@DontVoteMeDown 的答案,但就这一点而言,一页永远不会超过 5 个(除非我有一些可怕的编程故障 :))
    猜你喜欢
    • 2014-05-24
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2013-02-09
    • 2011-03-31
    • 2011-05-29
    相关资源
    最近更新 更多