【发布时间】:2012-03-24 21:44:08
【问题描述】:
我在 jQuery 中有一个类来处理谷歌地图及其标记。 在每个标记创建后,我为每个标记添加一个点击监听器:
var marker = new google.maps.Marker(options);
google.maps.event.addListener(marker, "click", function(event) {
//Do something with event
});
但是,我想使用类中的一个函数:
google.maps.event.addListener(marker, "click", this.onVehiculeClick.bind(this));
onVehiculeClick: function(event) {
console.log(this);
console.log(event);
//Do something with event
}
它在 firefox 和 chrome 上运行良好:它正在记录 this(我的对象)和谷歌地图事件。但不是在 Safari 或 IE(以及其他一些版本的 Firefox)中:它没有调用 onVehiculeClick 方法,如果我在 google.maps.event.addListener 之后添加一个 console.log,则没有任何输出。
如果我删除 .bind(this) 部分,则调用该方法,但我会丢失 this 上下文并且 this 将代表谷歌地图对象。我还尝试在构造函数中添加一个 var that = this,但它在方法上下文中未定义。
我在这里找到了一些我认为可能对我有帮助的东西:Google Maps JS API v3: Need to access Marker Object from inside the Event Handler,但它使用的是原型,我在 jQuery 中找不到任何等效的 curry 方法。
感谢您的帮助!
【问题讨论】:
-
你在使用图书馆吗? .bind 在 IEdeveloper.mozilla.org/en/JavaScript/Reference/Global_Objects/…。如果您提供更多代码和/或链接,我相信有一个简单的解决方案。
-
我只使用 jQuery 和 jQuery Inherit,之后是完整的代码。您是否知道 .bind 的任何解决方法,或者我是否可以获取每个标记的 id,以便我可以使用 jQuery 绑定而不是 Google 的?
-
我无法在 2 小时前回答自己。我稍后会发布脚本。您可以同时在这里找到它:2shared.com/document/gGg35IeU/gmap.html 或 uploading.com/files/c527addc/gmap.js
标签: jquery google-maps maps google-maps-markers