【问题标题】:How do I add markers to a map when a webpage first loads?首次加载网页时如何向地图添加标记?
【发布时间】:2012-05-13 01:55:46
【问题描述】:

在页面加载期间调用函数并向地图添加标记似乎真的很容易,但是我无法在页面加载时执行此操作,并且必须在地图加载后按下搜索按钮加载并准备就绪。我尝试使用此页面:

http://www.mkyong.com/javascript/javascript-call-funtion-after-page-load/

我在正文末尾放置了一个脚本来调用函数“addMarkers”,但没有任何反应。只有当我使用搜索按钮调用它时,我才能让这个函数正常工作。

地图自动加载后如何加载标记?

这是我的 html 正文:

<body>
<TR>
    <TD>
        <div id="map" style="width: 1250px; height: 750px"></div>
    </TD>
    <TD>
        <!--field for start-->
        <p>Start Date Time:</p>
        <form method="post" action="">
    <!--addMarkers button is called and executed correctly when this button is pressed-->
            <input type="button" value="Search" onclick="addMarkers()">
        </form>
    </TD>
</TR>
   <!--this does nothing or is not executed as I hoped-->
<script>
    window.onload=addMarkers() ;
</script>
</body>

我的地图加载函数位于我的 html 文档的末尾:

<script type="text/javascript">
   //***************Function moved out of header***************************************************
var map;
    var markersArray = [];
    var startformat;
    var endformat;

function load() {

    var myOptions = {
      center: new google.maps.LatLng(42, -70),
      zoom: 3,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map"),myOptions);
alert("Click search to look for markers.");

}
load();
</script>

如果有什么我可以澄清的,请告诉我。

编辑: addMarkers() 使用显示的地图区域和来自两个文本字段的一些文本。就像人们一直在说的那样,似乎函数在一切准备就绪之前就被执行了。我需要先加载页面上的所有内容,然后以某种方式执行 addMarkers()...

这是我现在拥有的,但工作方式与以前相同。在我按下搜索按钮之前不会生成标记:

 //************Part of head***************************************************
  <script src="addcreateclear_Markers.js"></script> 
  <script type="text/javascript">


    var map;
    var markersArray = [];
    var startformat;
    var endformat;

    function load() {

    var myOptions = {
      center: new google.maps.LatLng(42, -70),
      zoom: 3,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map"),myOptions);
    addMarkers();
    //alert("Click search to look for markers.");

   }

</script>
</head>


 <!--************Function in body***************************************************-->
 <body onload='load()'>
 <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="2" ALIGN="Center" WIDTH=100%>
<TR>
    <TD>
        <div id="map" style="width: 1250px; height: 750px"></div>


    </TD>
    <TD>
        <!--field for start-->
        <p>Start Date Time:</p>
        <form method="post" action="">
            <input type="button" value="Search" onclick="addMarkers()">
        </form>
    </TD>
</TR>


</TABLE>

<script>
window.onload = addMarkers();
</script>

</body>

更多编辑: 在 html 正文的末尾调用此函数可以按我的意愿工作:

<script type="text/javascript">
function addMarkersLag() {
  //Print the map object out to the console
    console.log(map);
    //Zoom in on the map after 2 seconds so you can see this function being called
    window.setTimeout(function() {
    addMarkers();
        alert("Does it work?.");
    }, 1000);
}
</script>

【问题讨论】:

  • 在你onload()你的地图标记之前,你应该先加载你的地图。注意顺序。
  • 旁注:始终使用小写的标签。 (&lt;td&gt; 而不是&lt;TD&gt;
  • 添加标记的代码在哪里?此外,您需要在加载地图后添加标记。
  • @Pete 添加标记的代码在头部。加载地图后如何添加标记?当我将加载脚本添加到标题时,它不起作用。
  • @Stagleton 你介意发布你所有的源代码吗?您确定您引用了 Google Maps API 吗?

标签: javascript html ajax google-maps-api-3


【解决方案1】:

我要求提供更多代码,以便给您一个我更确定的答案。就像这里的其他答案一样,我的答案有点猜测,因为我们没有完整的源代码。

您似乎将 load() 函数移到了文件末尾。所以可能发生的是window.onload(您的addMarkers() 函数)实际上是在执行地图脚本之前触发的。如果这是不正确的,请评论和/或更新您的原始问题并提供更多信息。

有关window.onload 何时被解雇的问题,请参阅here

编辑:见JSFiddle for the working code below

    <script src="http://maps.googleapis.com/maps/api/js?sensor=false" type="text/javascript"></script>
<script type="text/javascript">
function addMarkers() {
  //Print the map object out to the console
    console.log(map);
    //Zoom in on the map after 2 seconds so you can see this function being called
    window.setTimeout(function() {
        map.setZoom(10);
    }, 3000);
}
</script>
<body onload='load()'>
    <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="2" ALIGN="Center" WIDTH=100%>
        <TR>
            <TD>
                <div id="map" style="width: 1250px; height: 750px"></div>
            </TD>
            <TD>
                <!--field for start-->
                <p>Start Date Time:</p>
                <form method="post" action="">
                    <input type="button" value="Search" onclick="addMarkers()">
                </form>
            </TD>
        </TR>
    </TABLE>
<script>
function load() {
    var myOptions = {
      center: new google.maps.LatLng(42, -70),
      zoom: 3,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map"),myOptions);
    alert("Click search to look for markers.");
}
load();
   //***************Function moved out of header***************************************************
var map;
    var markersArray = [];
    var startformat;
    var endformat;
addMarkers();
</script>

</body>

【讨论】:

  • 嘿,是的,我认为这就是正在发生的事情。我试图改变我的代码,但似乎我无法在地图渲染后执行 addMarkers() 函数。我试过改变顺序,但是 load() 函数需要在头部的大多数脚本之后。如果有帮助,我可以尝试添加更多代码,但我已经完全改变了 html,我不想过多地改变问题
  • @Stagleton 怎么样?我必须添加自己的 addMarkers() 函数,但我认为这就是你想要的。此外,我们正在尝试回答您的问题,因此请尽可能多地编辑原始帖子,以便为我们提供所需的信息。如果我们无法回答,这个问题对任何人都没有帮助,包括您。
  • 嘿,谢谢。尽我所能添加您需要的所有信息。我真的很感激帮助。这看起来很有希望。今天晚些时候我会在睡了一会儿后编辑并更新进度。再次感谢。 g-夜
  • @StagleTon 很高兴听到它,但请意识到设置这样的超时并不是一个很好的解决方案。我有一个更新的Fiddle,它简单地从load() 函数调用addMarkers()。无论如何,很高兴能提供帮助。祝你好运。
  • 是的,我以前尝试过这种方法,但似乎无法正常工作。超时方式看起来很粗糙但很有效,希望我以后能得到更好的解决方案
【解决方案2】:

您在 DOM 完成加载之前调用了 load() 函数。将对函数的调用移至 HTML 中的正文:

&lt;body onload='load()'&gt;

您应该在实例化地图对象后调用 addMarkers():

map = new google.maps.Map(document.getElementById("map"),myOptions);
addMarkers();

这是一个显示如何加载标记的示例:

https://google-developers.appspot.com/maps/documentation/javascript/examples/marker-simple (查看源代码)

【讨论】:

  • 我无法让它以这种方式工作。我的 addMarkers() 方法使用地图区域信息和来自一些下一个字段的信息来生成。也许这是问题的一部分。 :-/
  • @andresf 我认为设置window.onload = fxn; 应该调用fxn 函数 DOM 设置完成并且所有图像都完成加载之后。你为什么说load() 在 DOM 完成加载之前被调用?
  • @SeanMickey 因为用户创建了一个名为 load() 的函数。他不是在谈论window.onload。真的,我认为他的问题中没有足够的信息来回答它,但他似乎不愿意添加更多代码......
  • @andresf 哦,好的,我明白了。我以为您在谈论分配给addMarkersonload,它 设置为:window.onload=addMarkers()。这很令人困惑,因为onload 指向addMarkers,然后是单独的load。只是想确保我在跟踪你。谢谢 -
  • Stgleton,您为什么不提供指向您网站的链接?也许您需要设置一个事件侦听器以在地图加载完成后触发addMarkers 函数...
【解决方案3】:

为什么不在地图创建后直接调用函数呢?

 <script type="text/javascript">
//***************Function moved out of header***************************************************
var map;
var markersArray = [];
var startformat;
var endformat;

function load() {

var myOptions = {
  center: new google.maps.LatLng(42, -70),
  zoom: 3,
  mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map"),myOptions);
alert("Click search to look for markers.");

addMarkers();    <---- ADDED HERE

}
load();
</script>

【讨论】:

  • 我试过了,但它不起作用。不知道为什么。从逻辑上讲,在创建地图之后,addMarkers 函数应该可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2013-12-21
  • 2016-07-07
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 2011-06-23
相关资源
最近更新 更多