3

有人可以解释在google jquery.ui.map插件jQuery.fn[name]中找到的以下代码片段 () 的含义:

jQuery.each(('click mousedown rightclick dblclick mouseover mouseout drag dragend').split(' '), function(i, name) {
    jQuery.fn[name] = function(a, b) {
        return this.addEventListener(name, a, b);
    };
});

以及我们如何将回调函数绑定到地图对象上的点击事件,我尝试了以下但event没有latLng属性:

$('#map_canvas').gmap().click(function(event) {
        alert(event.latLng);
    });

提前致谢。

4

4 回答 4

6

该代码片段覆盖了一些 jQuery 方法,以便可以在某些Google Maps 对象上使用它。例如

    var map = $('#map_canvas').gmap('get', 'map')
    $(map).click(function() {
        var self = this; // this is the map object
    });

    $('#map_canvas').gmap('addMarker', { ... }).click(function() {
        var self = this; // this refers to the marker object
    }).hover(function() {
         var self = this; // this refers to the marker object
    });

如果您需要绑定其他事件,例如 zoom_changed,那么只需

var map = $('#map_canvas').gmap('get', 'map');
$(map).addEventListener('zoom_changed', function() {

});
于 2012-05-18T20:35:58.783 回答
1

你已经回答了你自己的问题 :) 如果你想将事件绑定到你的谷歌地图,你必须使用this.addEventListener(name, a, b);(这实际上是允许你对某些事件执行函数的代码位。见下文)

例子:

 google.maps.event.addListener(my_map_object, 'click', function() {
    my_map_object.setZoom(8);
    alert("I've just zoomed by clicking the map!");
 });

您可以将事件添加到地图对象或放置在地图上的任何标记。

有关完整说明,请参阅https://developers.google.com/maps/documentation/javascript/events。Google Maps API 有很好的使用示例,您可以从中学到很多东西 :)

于 2012-05-09T10:03:30.883 回答
1
google.maps.event.addListener(marker, 'mouseover', function() {
 $('.hover_div').html('<a target="_blank" href="'+marker.url+'">'+marker.hover + marker.title +'</a>').show();
});

或者

    google.maps.event.addListener(marker, 'click', function() {
      window.open(
  marker.url,
  '_blank' // <- This is what makes it open in a new window.
);

我不会使用插件,因为它会限制你的工作。尝试阅读如何自己创建地图。

于 2012-05-09T10:05:51.920 回答
0

我发现从页面中窃取所有事件并将它们重新分配给地图会导致委托事件不再起作用。例如,如果您尝试trigger()单击另一个元素,它就不起作用。例如 - 在设置事件侦听器on("click")仍然有效的情况下,它将不再侦听以编程方式触发的点击。

我已经更改了我自己的文件副本上的代码。这是以防万一有人感兴趣。它将函数的“名称”更改为在前面添加“map”,并将原始方法的第一个字母大写:

click()更改mapClick,dragend更改mapDragend

jQuery.each(('click rightclick dblclick mouseover mouseout drag dragend').split(' '), function (i, name) {
        jQuery.fn["map" + name[0].toUpperCase() + name.substr(1)] = function (a, b) {
            return this.addEventListener(name, a, b);
        }
});
于 2015-08-10T14:47:06.477 回答