1
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8" />
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false&region=vi&language=vi">    
    </script>

    <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
    <script type="text/javascript">
        var map;
    </script>
    <style type="text/css">
        html {
            height: 100%;
        }

        body {
            height: 100%;
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body onload="initialize()">
    <div id="map_canvas" style="width: 100%; height: 100%"></div>

    <script type="text/javascript">
        function initialize() {
            var mapOptions = {
                center: new google.maps.LatLng(10.79, 826.694),
                zoom: 13,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            map = new google.maps.Map(document.getElementById("map_canvas"),
                mapOptions);
        }
    </script>    

    <script>            
        alert(map);
    </script>

</body>
</html>

私の関数のいくつかは変数を使用する必要がありますが、変数が不明mapであるという警告を受け取り続けています。mapマップが定義されたことをブラウザに記憶させるにはどうすればよいmap = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); ですか

4

3 に答える 3

3

これは、関数initialize()onLoadを呼び出すためです。つまり、マップ変数にはonLoadが割り当てられます。しかし、スクリプト

<script>            
    alert(map);
</script>

onLoadトリガーされる前に呼び出されます

試す:

<script type="text/javascript">
    function initialize() {
        var mapOptions = {
            center: new google.maps.LatLng(10.79, 826.694),
            zoom: 13,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map_canvas"),
            mapOptions);


        alert(map);
    }

</script>
于 2013-02-19T18:22:55.300 に答える
2

なぜなら

<script>            
    alert(map);
</script>

前に解雇されます

onload="initialize()"

と呼ばれます。

于 2013-02-19T18:22:53.920 に答える
1

mapそれが実行されるundefinedときになりalert()ます。これは、がメソッドのalert()前に実行されるためです。initialize()

<script>本文のタグはすぐに実行されonloadますが、指定した関数は、すべての本文タグの内容 (およびその中のスクリプト) が解析されて実行されるまで実行されません。

したがって、一度initialize()呼び出されると、この設定は思いどおりに機能し、グローバル変数mapはどこでも使用できるようになります。

于 2013-02-19T18:24:47.990 に答える