创建包含id属性的Google Maps Marker

时间:2012-09-17 16:49:52

标签: jquery google-maps

对不起可能是一个愚蠢的问题,但我之前看过Adding ID's to google map markers但没有成功。

我尝试创建一个包含多个标记的地图。我想用jquery来处理这个标记。简单的$('#marker1')。doSomething(); 如何为这个标记赋予一个有价值的id属性?我非常简单的演示代码将向您展示我尝试使其工作的方式。

function initialize() {
  var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
  var mapOptions = {
    zoom: 6,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById('map'), mapOptions);
  var marker = new google.maps.Marker({
      position: myLatlng,
      map: map,
      draggable: true,
      title: 'Hello World!',
  });
  marker.set("type", "point");
  marker.set("id", "ABC");
}

非常感谢!

2 个答案:

答案 0 :(得分:1)

var marker包含标记对象。您可以将自己的属性添加到此对象

marker.type = "point";

marker.myID = "ABC";

您可能希望跟踪您创建的所有标记,在函数外部创建一个数组以赋予其范围。并将您创建的所有标记推送到此阵列。

var markers = [];

function initialise()
{
    // Initialise the map etc.

    var marker = new google.maps.Marker({
        // Marker options
    });

    marker.type = "type";

    marker.myID = 4

    markers.push(marker);
}

如果您创建其他标记,只需将它们推送到您创建的阵列即可。要访问它们,只需使用$.each()迭代数组。

答案 1 :(得分:1)

使用以下方法将点击事件绑定到标记:

function initialize() {
    var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
    var mapOptions = {
    zoom: 6,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}

var map = new google.maps.Map(document.getElementById('map'), mapOptions);
var marker = new google.maps.Marker({
    position: myLatlng,
    map: map,
    draggable: true,
    title: 'Hello World!',
    type: 'point'
});

google.maps.event.addListener(marker, 'click', function() {
    // do something. You may use jQuery here.
});

您可以向标记添加任意数量的数据,例如:

var marker = new google.maps.Marker({
    position: myLatlng,
    map: map,
    draggable: true,
    title: 'Hello World!',
    type: 'point',
    somedata: true
});

然后使用该对象对点击执行某些操作,例如......

google.maps.event.addListener(marker, 'click', function() {
    if (this.somedata) doSomething();
});

此外,如果您放下多个标记,可以使用简单的循环向所有标记添加点击事件。

一个很好的例子是我有一个lat / lng位置数组,并希望为每个位置删除标记,并让每个标记在点击时执行不同的操作。我可以设置一些数组,一个是lat / lng坐标,另一个是匹配的标题,比如说,一个html元素存在于页面的其他地方(所以在点击时它会删除该元素,作为一个例子)。 p>

var markers  = [],
    marker_i = 0,
    marker_p = ['-25.363882,131.044922','-25.363882,133.044922'],
    marker_t = ['Foo', 'Bar'],
    marker_d = ['.foo', '.bar'];

for (var i = 0; i < marker_pos.length; i++) {
    markers.push(new google.maps.Marker({
        position: marker_p[i],
        map: map,
        draggable: true,
        type: 'point',
        title: marker_t[i],
        htmlelement: marker_d[i]
    });

    google.maps.event.addListener(markers[marker_i], 'click', function() {
        $(this.htmlelement).remove();
    });

    marker_i++;
}

希望这有帮助。