2016-04-08 10 views
-1

Im пытается закрыть старую инфоиндустрию и открыть новую инфоиндустрию (или заменить содержимое на этом infowindow), но я не могу заставить ее работать. Я пытаюсь это сделать Google. Если я сейчас попробую, Google Chrome браузер разработчика «Консоль разработчика» говорит: «Некопать TypeError: Невозможно прочитать свойство« закрыть »неопределенного».Google maps api open new infowindow, щелкнув ссылку внутри infowindow

<script> 
var map; 
var marker; 
var markerInfoWindow; 

function intMap() { 

    var map = new google.maps.Map(document.getElementById('map'), { 
     zoom: 10, 
     center: new google.maps.LatLng(60.3000216, 24.944929), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

    // Create a new marker 
    var marker = new google.maps.Marker({ draggable: true, icon: 'images/new_marker.png' }); 
    var markerInfoWindow = new google.maps.InfoWindow(); 

    google.maps.event.addListener(map, 'click', function(event) { 
     marker.setPosition(event.latLng); 
     marker.setMap(map); 

     var contentString = "<a href='#' onclick='openNew();'>Click here to open new infowindow!</a>"; 
     var markerInfoWindow = new google.maps.InfoWindow({ 
      content: contentString 
     });    
     markerInfoWindow.open(map, marker); 
     marker.addListener('click', function() { 
      markerInfoWindow.open(map, marker); 
     }); 
    }); 
}   
    google.maps.event.addDomListener(window, "load", intMap); 

    function openNew() { 
     markerInfoWindow.close(); 
     var contentString = "Open this infowind when clicked link"; 
     var markerInfoWindowNew = new google.maps.InfoWindow({ 
      content: contentString 
     }); 
    } 
</script> 

ответ

1

Вы получили проблемы с областью действия переменной markerInfoWindow - в коде создается новый локальный, который скрывает внешний один

var map; 
var marker; 
var markerInfoWindow; 

function intMap() { 

    map = new google.maps.Map(document.getElementById('map'), { 
     zoom: 10, 
     center: new google.maps.LatLng(60.3000216, 24.944929), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

    // Create a new marker 
    marker = new google.maps.Marker({ 
     draggable: true, 
     icon: 'images/new_marker.png' 
    }); 
    markerInfoWindow = new google.maps.InfoWindow(); 

    google.maps.event.addListener(map, 'click', function(event) { 
     marker.setPosition(event.latLng); 
     marker.setMap(map); 

     var contentString = "<a href='#' onclick='openNew();'>Click here to open new infowindow!</a>"; 
     markerInfoWindow = new google.maps.InfoWindow({ 
      content: contentString 
     }); 
     markerInfoWindow.open(map, marker); 
     marker.addListener('click', function() { 
      markerInfoWindow.open(map, marker); 
     }); 
    }); 
} 
google.maps.event.addDomListener(window, "load", intMap); 

function openNew() { 
    markerInfoWindow.close(); 
    var contentString = "Open this infowind when clicked link"; 
    markerInfoWindow = new google.maps.InfoWindow({ 
     content: contentString 
    }); 
    markerInfoWindow.open(map, marker); 
} 
+0

Спасибо! Теперь я могу закрыть этот «markerInfoWindow», но он не раскрывает новый «markerInfoWindowNew» infowindow. – user2885442

+0

@ пользователь2885442 проверка обновленный код. 1) вы забыли открыть информационное окно: '' 'markerInfoWindow.open (map, marker);' ''; 2) снова '' 'map''' был затенен внутри' '' intMap'''. Следовательно, внешний экземпляр '' '' '' '' '' 'всегда был' '' null''' – ruX