"a is null" даже после успешной загрузки карты Google - PullRequest
0 голосов
/ 25 октября 2011

У меня есть набор вкладок jQuery UI, каждый из которых загружает project.php, используя ajax.В зависимости от параметров, переданных в сценарий, другая карта Google отображается с использованием следующего файла JavaScript внутри project.php:

var tab_index = $('#tabs').tabs('option', 'selected');
$('.site_map:visible').css('height','300px');

MapID = $('.site_map:visible').attr('id');

if (MapID !== 'map-new'){
    var map_id = 'map-'+tab_index;
    $('.site_map:visible').attr('id', map_id);
} else {
    MapNewSite();
}

var latlng = new google.maps.LatLng(19,-70.4);
var myOptions = {
  zoom: 8,
  center: latlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
};

arrMaps[tab_index] = new google.maps.Map(document.getElementById("map-" + tab_index), myOptions);
arrInfoWindows[tab_index] = new google.maps.InfoWindow();
placeMarker($('.site_details:visible .inpLat').val(), $('.site_details:visible .inpLng').val(), tab_index);

function MapNewSite(){
    arrMaps[tab_index] = new google.maps.Map(document.getElementById("map-new"), myOptions);
    placeMarker(19,-70.4,tab_index);
    arrInfoWindows[tab_index] = new google.maps.InfoWindow();
}

Каждая карта, загруженная с использованием параметров, возвращаемых запросом моей базы данных, загружается без каких-либо проблем.Однако в одном последнем случае я загружаю project.php во вкладку без каких-либо параметров, чтобы у пользователя была пустая вкладка для манипулирования.Сигнал о том, что карта не должна быть загружена с использованием координат базы данных, заключается в том, что идентификатор ее div равен «map-new».

Карта, сгенерированная в этой вкладке, загружается, но затем выдает мне «a is null»msgstr "ошибка, которая обычно означает, что не удалось найти div с идентификатором, указанным для инициализации карты.Что вызывает эту ошибку даже после загрузки карты?Как я могу остановить возникновение ошибки?

Вот код JavaScript на родительской странице, содержащей вкладку сайта:

    var arrMaps = {};
    var arrInfoWindows = {};
    var arrMarkers = {};

    function placeMarker(lat, lng, tab_index){
        map = arrMaps[tab_index];
        var bounds = new google.maps.LatLngBounds();
        var latlng = new google.maps.LatLng(
            parseFloat(lat),
            parseFloat(lng)
        );

        bounds.extend(latlng);
        createMarker(latlng, tab_index);
        map.fitBounds(bounds);

        zoomChangeBoundsListener = 
            google.maps.event.addListener(map, 'bounds_changed', function(event) {
                if (this.getZoom()){
                    this.setZoom(10);
                }
            google.maps.event.removeListener(zoomChangeBoundsListener);
        });
    }

    function createMarker(latlng, tab_index) {
        var html = '<a href="#" target="_blank" onclick="OpenMapDialog();return false;">Click here to move marker</a>';   
        arrMarkers[tab_index] = new google.maps.Marker({
            map: arrMaps[tab_index],
            position: latlng
        });

        arrInfoWindows[tab_index] = new google.maps.InfoWindow();

        google.maps.event.addListener(arrMarkers[tab_index], 'click', function() {
            arrInfoWindows[tab_index].setContent(html);
            arrInfoWindows[tab_index].open(arrMaps[tab_index], arrMarkers[tab_index]);
        });
    }

    $(function() {
        $( "#tabs" ).tabs({
            ajaxOptions: {
                error: function( xhr, status, index, anchor ) {
                    $( anchor.hash ).html(
                        "Couldn't load this tab. We'll try to fix this as soon as possible. " +
                        "If this wouldn't be a demo." );
                }
            },
            cache: true
        });
    });

Ответы [ 2 ]

0 голосов
/ 30 октября 2011

Оказывается, я случайно инициализировал карту как внутри if, так и за ее пределами.

0 голосов
/ 25 октября 2011

Взгляните на http://www.pittss.lv/jquery/gomap/. Простота в использовании и очень мощный.Я сам им пользуюсь.

...