1

ページのロード中に関数を呼び出してマーカーをマップに追加するのは本当に簡単に思えますが、ページのロード中にこれを行うことはできず、マップがロードされて準備が整った後に検索ボタンを押す必要があります. このページを使用してみました:

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() は、表示されたマップ領域と 2 つのテキスト フィールドのテキストを使用します。人々が言っ​​ているように、すべての準備が整う前に関数が実行されているようです。最初にロードするページのすべてを取得してから、何らかの方法で 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>
4

3 に答える 3

1

より確実な回答を提供できるように、より多くのコードを要求しました。ここでの他の回答と同様に、ソースコード全体がないため、私のものは少し推測です。

load()関数をファイルの最後に移動したようです。window.onloadしたがって、マップ スクリプトが実行される前に(addMarkers()関数が) 実際に起動している可能性があります。これが正しくない場合は、元の質問にコメントするか、元の質問を更新して詳細情報を入力してください。

がいつ解雇されるかについては、こちらを参照してください。window.onload

編集:以下の作業コードについては、JSFiddle を参照してください。

    <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>
于 2012-05-03T17:14:07.810 に答える
1

load()DOM の読み込みが完了する前に関数を呼び出しています。関数の呼び出しを HTML の本文に移動します。

<body onload='load()'>

マップ オブジェクトをインスタンス化した後、addMarkers() を呼び出す必要があります。

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

マーカーをロードする方法を示す例を次に示します。

https://google-developers.appspot.com/maps/documentation/javascript/examples/marker-simple (ソースを表示)

于 2012-05-03T14:46:51.117 に答える
0

マップが作成された直後に単に関数を呼び出さないのはなぜですか?

 <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>
于 2012-05-03T14:46:25.647 に答える