سؤال

لا يمكنني إغلاق نافذة المعلومات للعلامة، فأنا أذهب، أي فكرة؟ شكرا لمساعدتك

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
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top