Функция Javascript работает при обратной передаче, но не при загрузке страницы - PullRequest
0 голосов
/ 01 июня 2011

Я использую плагин Google Maps и хочу, чтобы он отображался при загрузке страницы, а также при всех постбэках. Кажется, он работает только на постбэках. Есть идеи? У меня есть тег onload тела как "body background =" # ccccff "onload =" initialize () "", но функция не определяется в первый раз. Зачем? Вот код:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">      </script>
<script type="text/javascript">
var mostRecentInfo;
function initialize() {
    var center = new google.maps.LatLng(0, 0);
    var mapOptions = {
        center: center,
        zoom:1,
        mapTypeId: google.maps.MapTypeId.SATELLITE
    };

    var map = new google.maps.Map(document.getElementById("map"), mapOptions);
    var posStr = <%=JSON%>;
    if (posStr.toString() != "0") {
        var test = posStr.toString().split(',');            
        var groundstation = <%=groundStation%>;
        var dateTimeStr = <%=datetimesStr%>;
        var AUStr = <%=auStr%>;
        var spaceCraft = <%=spacecraft%>;
        var dateTimes = dateTimeStr.toString().split(',');
        var auIDs = AUStr.toString().split(',');
        var latitude = new Array((test.length / 2));
        var longitude = new Array(latitude.length);
        var i = 0;
        var markerArray = new Array();
        for (var j = 0; j < (test.length - 1); j = j + 2) {
            latitude[i] = eval(test[j+1]);
            longitude[i] = eval(test[j]);
            var position = new google.maps.LatLng(latitude[i], longitude[i]);
            var marker = new google.maps.Marker({
                map:map,
                position:position
            });
            markerArray.push(marker);
            i++;
        }
        var sumLat = 0;
        var sumLong = 0;            
        for (i = 0; i < latitude.length; i++) {
            sumLat += latitude[i];
            sumLong += longitude[i];
        }
        var avgLat = sumLat / latitude.length;
        var avgLong = sumLong / longitude.length;
        center = new google.maps.LatLng(avgLat, avgLong);
        map.panTo(center); 
        var circle; 
        var contentStr = new Array();                       
        for (i = 0; i < markerArray.length; i++) {
            position = markerArray[i].getPosition();
            var circOptions = {
                strokeColor:"#770000",
                strokeOpacity:0.1,
                fillColor:"#881111",
                fillOpacity:0.4,
                map:map,
                center:position,
                radius:2500000
            };
            circle = new google.maps.Circle(circOptions);
            marker = markerArray[i];
            contentStr[i] = '<div id="content">' +
                '<b>Spacecraft: </b>' + spaceCraft.toString() + '<br />' +
                '<b>Start Time (UTC): </b>' + dateTimes[i].toString() + '<br />' +                  
                '<b>Position: </b>(' + latitude[i].toString() + ', ' + longitude[i].toString() + ')<br />' +
                '<b>AU ID: </b>' + auIDs[i] + '<br />' +
                '<b>Downlink Station: </b>' + groundstation.toString() + '<br />' +
                '</div>';
            addListener(map, marker, contentStr[i]);
        }
    }         
}

function addListener(map, marker, content) {
    var infowindow = new google.maps.InfoWindow({
        content:content
        });               
    google.maps.event.addListener(marker, 'mouseover', function() {
        if (mostRecentInfo) 
            mostRecentInfo.close();
        mostRecentInfo = infowindow;
        infowindow.open(map, this);
    });
}

и т.д.

1 Ответ

0 голосов
/ 02 июня 2011

Вероятно, проблема с синхронизацией при вызове функции onload до готовности функции инициализации. По этой причине такие библиотеки, как jQuery, имеют функцию document.ready. Вы можете попробовать удалить onload и позвонить на initialize() внизу вашего HTML, прямо перед закрывающим тегом body Это, вероятно, будет работать для вас.

Если у вас есть опция, я бы использовал библиотеку, чтобы вы могли убедиться, что функция есть и ваша страница готова. Если вы еще не пробовали, попробуйте jQuery .

...