2015-08-06 2 views
1

я имел это, работает отлично:Отправить дополнительные параметры в функции событий Google Maps

google.maps.event.addListener(marker, 'rightclick', function(event) { 
    infowindow.close(); 
    marker.setMap(null); 
    marker.solucionado = true; 
    cant_markers--; 
    cant_solucionados++; 
}); 

Но я хочу сделать это:

google.maps.event.addListener(marker, 'rightclick', deleteMarker); 

function deleteMarker(marker) { 
    infowindow.close(); 
    marker.setMap(null); 
    marker.solucionado = true; 
    cant_markers--; 
    cant_solucionados++; 
}); 

это в настоящее время выходит за рамки, есть способ отправки объекта-маркера в качестве параметра?

ответ

2

не выходит за рамки, это область, где будет выполняться обработчик.

Объем обработчика добавленного с помощью addListener всегда объект, где слушатель был добавлен (первым аргументом addListener, это в вашем коде)

Просто используйте this для доступа маркера внутри обработчика:

function initialize() { 
 

 
    var map = new google.maps.Map(document.getElementById("map-canvas"), { 
 
     center: new google.maps.LatLng(0, 0), 
 
     zoom: 1 
 
    }), 
 
    marker = new google.maps.Marker({ 
 
     map: map, 
 
     position: map.getCenter() 
 
    }); 
 
    google.maps.event.addListener(marker, 'rightclick', deleteMarker); 
 

 
} 
 

 
function deleteMarker() { 
 
    this.setMap(null); 
 
} 
 
google.maps.event.addDomListener(window, 'load', initialize);
html, 
 
body, 
 
#map-canvas { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
}
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3"></script> 
 
<div id="map-canvas"></div>

Однако, когда вы wan't передать дополнительные argumen ц к обработчику это тоже возможно, использовать deleteMarker.call (или deleteMarker.apply)

Пример:

function initialize() { 
 

 
    var map = new google.maps.Map(document.getElementById("map-canvas"), { 
 
     center: new google.maps.LatLng(1, 2), 
 
     zoom: 1 
 
    }), 
 
    marker = new google.maps.Marker({ 
 
     map: map, 
 
     position: map.getCenter() 
 
    }), 
 
    var1 = "it ", 
 
    var2 = "work's"; 
 
    google.maps.event.addListener(marker, 'rightclick', 
 
    function(e) { 
 
     deleteMarker.call(this, //the scope of the handler...the marker 
 
     e, //the original event 
 
     var1, //additonal argument 
 
     var2 //another argument 
 
    ); 
 
    } 
 
); 
 

 
} 
 

 
function deleteMarker(event, v1, v2) { 
 
    this.setMap(null); 
 
    alert(v1 + v2 + '@' + event.latLng) 
 
} 
 
google.maps.event.addDomListener(window, 'load', initialize);
html, 
 
body, 
 
#map-canvas { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
}
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3"></script> 
 
<div id="map-canvas"></div>

0

Предлагаю вам создать ваше приложение с помощью общих функций для такого общего действия, как удаление маркера. В какой-то момент вам может понадобиться удалить список маркеров одновременно или удалить маркер по другой причине, кроме щелчка. Для этого лучше создать функцию, которая обрабатывает все (или большинство) ситуаций, чем повторять ваш код.

google.maps.event.addListener(marker, 'rightclick', function(e){ 
    deleteMarkers([marker]); 
}); 

function deleteMarkers(markers) { 
    for (var i=0; i < markers.length; i++) { 
     markers[i].setMap(null); 
    } 
}); 

см документ: https://developers.google.com/maps/documentation/javascript/events#EventArguments

0

Это потому, что вы переопределены с аргументом событий.

попробовать это ...

google.maps.event.addListener(marker, 'rightclick', deleteMarker); 

function deleteMarker(event) { 
    infowindow.close(); 
    marker.setMap(null); 
    marker.solucionado = true; 
    cant_markers--; 
    cant_solucionados++; 
}); 

, если вам нужно передать несколько параметров, вы можете сделать это такое ...

google.maps.event.addListener(marker, 'rightclick', function(event) { 
    deleteMarker(event, marker); 
}); 

function deleteMarker(event, marker) { 
    infowindow.close(); 
    marker.setMap(null); 
    marker.solucionado = true; 
    cant_markers--; 
    cant_solucionados++; 
}); 
+0

но на основе кода отвечал, вам просто нужно изменить 'функцию deleteMarker (маркер) {'to' function deleteMarker (event) {' – WhiteHat

Смежные вопросы