3

有人能解释一下下面的代码片段(jQuery.fn[name])的含义, google jquery.ui.map插件发现:jQuery的谷歌地图插件,添加事件侦听器

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); 
    }); 

在此先感谢。

回答

6

这段代码覆盖了一些jQuery方法,以便它可以用于某些 Google地图对象。例如。

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() { 

}); 
+0

这可以防止我触发另一个对象上的.click()事件。我该如何解决此问题? – SeanKendle

+0

是否有快速如何限制这种情况只捕获实际地图上的事件,而不从该页面中窃取所有其他事件? – SeanKendle

+0

如果有其他人遇到此问题,请参阅我的答案以获得可能的解决方案。 – SeanKendle

1

你已经回答了你自己的问题:)如果你想绑定事件到你的Google地图,你必须使用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的完整说明。谷歌地图API的使用有很好的例子,你可以从他们身上学到了很多:)

+0

我知道如何使用谷歌地图API添加事件列表,我只是想解释jQuery代码(用于学习目的),因为我无法理解它。 –

+0

使用AddEvenListener是因为事件不是以标准的Javascript/jQuery方式处理的。您需要阅读Google Maps API才能看到差异。从我链接的站点:“这些事件可能看起来像标准的DOM事件,但它们实际上是Maps API的一部分。由于不同的浏览器实现不同的DOM事件模型,因此Maps API提供了这些机制来侦听和响应DOM事件,而无需处理各种跨浏览器特性。这些事件通常还会在事件中传递参数,以指示某些UI状态(如鼠标位置)。“ – Flater

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. 
); 

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

0

我发现,在偷页面中的所有事件,并将它们重新分配到地图的原因委托的事件不再工作。例如,如果您尝试trigger()单击另一个元素,则不起作用。例如 - 为on("click")设置事件侦听器的地方仍然有效,它将不再侦听以编程方式触发的点击。

我修改了我自己的文件副本上的代码。这是为了防止任何人感兴趣。它改变了功能的“名称”添加“地图”在前面,并利用原有方法的第一个字母:

click()变化mapClickdragend变化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); 
     } 
}); 
相关问题