لا يريد Infowindow إغلاق مع خرائط Google API V3
-
19-09-2019 - |
سؤال
لا يمكنني إغلاق نافذة المعلومات للعلامة، فأنا أذهب، أي فكرة؟ شكرا لمساعدتك
function mapClick(event) {
createLocationMarker(event.latLng);
}
function createLocationMarker(location) {
var clickedLocation = new google.maps.LatLng(location)
var gMarker = new google.maps.Marker({position:location, map:gMap2, draggable: true});
gMap2.setCenter(location);
displayMarkerPosition(gMarker);
google.maps.event.addListener(gMarker, "dragstart", closeMapInfoWindow );
google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); });
}
function closeMapInfoWindow() {infowindow.close(); }
function displayMarkerPosition(gMarker) {
var message = "my message";
var infowindow = new google.maps.InfoWindow(
{ content : message,
});
infowindow.open(gMap2,gMarker);
}
المحلول
نعم، تحدد infowindow
في نطاق خاص، ولكن الوصول إليها خارج هذا النطاق. أضف هذا إلى بداية البرنامج النصي الخاص بك:
var infowindow;
وإزالة "فار" من خط المنشئ الخاص بك:
infowindow = new google.maps.InfoWindow(
الرمز النهائي (من عينتك) يبدو مثل هذا.
المزيد من الخلفية قليلا
عندما تحدد متغير مع var
, ، مرتبط بهذا النطاق. إذا قمت بتحديده في وظيفة، إلا أن هذه الوظيفة وغيرها من الوظائف المحددة في ذلك يمكنها الوصول إلى المتغير. الطريقة الأخرى الوحيدة لتمريرها هي معلمة في وظيفة.
تحديث أود أن أفعل هذا لتسهيل مضاعفات متعددة. لاحظ لقد عادت إلى الأصل var
إعلان للحفاظ على استبداله بهذه الوظيفة. ثم أعد الإشارة إلى الكائن لاستخدامه لاحقا:
function mapClick(event) {
createLocationMarker(event.latLng);
}
function createLocationMarker(location) {
var clickedLocation = new google.maps.LatLng(location)
var gMarker = new google.maps.Marker({position:location, map:gMap2, draggable: true});
gMap2.setCenter(location);
// Store reference to info window
var info = displayMarkerPosition(gMarker);
google.maps.event.addListener(gMarker, "dragstart", function(){ info.close } );
google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); });
}
function displayMarkerPosition(gMarker) {
var message = "my message";
var infowindow = new google.maps.InfoWindow(
{ content : message }
);
infowindow.open(gMap2,gMarker);
return infowindow; // Return the reference to the infowindow
}
لا تنتمي إلى StackOverflow