如何让事件使用event.stopPropagation()?

时间:2012-04-04 22:36:22

标签: javascript jquery google-maps google-maps-api-3

我正在使用Markercluster plugin Google Maps API V3。我想在用户单击群集图标时访问click事件。我能来的最接近的是

JS代码

google.maps.event.addListener(mc, "clusterclick", function (cluster) {
    event.stopPropagation();
});

问题: event.stopPropagation()只能在Chrome中使用,而不是Firefox或IE。它只有在传递event对象作为参数添加到函数时才能工作,如下所示:

$("#div").click(function(event) { 
    event.stopPropagation();
}

但是,我不知道MarkerClusterer创建的集群图标的DOM元素,所以我不能选择它!我该怎么办?

2 个答案:

答案 0 :(得分:3)

<击> 见这里:https://developers.google.com/maps/documentation/javascript/events#EventArguments

  

google.maps.event.addListener(map,'click',function(event){placeMarker(event.latLng);});

事件calback的第一个参数是事件对象。在你的情况下,它将是:

google.maps.event.addListener(mc, "clusterclick", function (cluster) {     
    cluster.stopPropagation();     
});

<击>

由于这是一个自定义事件,并且程序员没有将事件对象作为参数传递,因此您的解决方案是自己实现它:

来自http://code.google.com/p/google-maps-utility-library-v3/source/browse/trunk/markerclustererplus/src/markerclusterer.js?r=362

第150和151行

发件人:

google.maps.event.trigger(mc, "click", cClusterIcon.cluster_);
google.maps.event.trigger(mc, "clusterclick", cClusterIcon.cluster_); // deprecated name 

google.maps.event.trigger(mc, "click", e, cClusterIcon.cluster_);
google.maps.event.trigger(mc, "clusterclick", e, cClusterIcon.cluster_); // deprecated name 

请注意e作为第3个参数。这是来自原始事件的事件对象,在第139行

上调用这2行
google.maps.event.addDomListener(this.div_, "click", function (e) {

答案 1 :(得分:1)

您可以尝试使用return false;。虽然这既停止了事件冒泡以及默认行为。因此,我不知道您是否可以在特定情况下使用它。

<强>更新

clusterclick event is deprecated。您应该使用click事件。

您是否已尝试同时执行.stopPropagtion.cancelBubble = true