【问题标题】:Marker listener in a loop in Google Maps v3Google Maps v3 循环中的标记侦听器
【发布时间】:2013-07-19 21:18:54
【问题描述】:

我在index page 中有一堆标记,我在循环中创建并向它们注册侦听器。我单击其中一个标记,它会将我带到next page,在那里我有一个anchor button,它需要知道哪个标记启动了该操作。我有一个逐步的以下场景:

  • 单击标记 1 //outputs a correct id 1 in console
  • 带我到下一页//outputs a correct id 1 in console on clicking anchor
  • 返回索引页面并单击标记 2 //outputs a correct id 2 in console
  • 带我到下一页//outputs both ids 1 and 2 in console on clicking anchor

最后一步是我想要id 2 的问题所在。事实上,如果我第三次重复这个过程,我会得到所有的 id 1、2 和 3,而在这种情况下我只想要 id 3

我的代码:

$.each(otherLocations, function(index, value){
  var markerOtherLocations = new MarkerWithLabel({
    position: new google.maps.LatLng(value.latitude, value.longitude),
    map: map,
    title: value.name+" "+value.distance,
    icon: iconImage,
    labelContent: value.name+" "+value.distance,
    labelAnchor: new google.maps.Point(50, 0),
    labelClass: "labels", // the CSS class for the label
    labelStyle: {opacity: 0.60}
  });


  google.maps.event.addListener(markerOtherLocations, 'click', function() {
    $.mobile.changePage("#detail-page", { transition: "flip"} );
    console.log(value.localurl);//Outputs correct url

    $("#ref").on("click", function(){  //The problem is in this anchor click
      console.log(value.localurl);//Outputs the current as well as all the previous urls
    });
  });
});

【问题讨论】:

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


    【解决方案1】:

    每次单击标记OtherLocations 时,它都会为#ref 注册一个全新的onclick 事件回调,从而导致问题。记住一个事件可以被许多回调注册。考虑下面的代码:

    $("#ref").on("click", function(){  
      console.log('do function A');//register A first
    });
    
    $("#ref").on("click", function(){ 
      console.log('do function B');//register B later, which won't be overridden.
    });
    
    //If you click #ref then, it'll output A and B, following the registered sequence before.
    

    所以在我看来,您的代码可能是:

    google.maps.event.addListener(markerOtherLocations, 'click', function() {
      $.mobile.changePage("#detail-page", { transition: "flip"} );
      console.log(value.localurl);//Outputs correct url
      $("#ref").data('origin',value.localurl);
    });
    
    $("#ref").on("click", function(){ // register once 
      console.log($(this).data('origin'));
    });
    

    【讨论】:

    • 是的,你建议的方法奏效了。现在我有被点击的最新标记的handle。然而,由于它在each 循环内,我多次得到相同的handle。我把它放在循环之外,现在它很完美。但同样需要注意的是,因为我在index page 中也有一个刷新功能,因此当我刷新时整个脚本会再次运行。因此,我再次得到正确的handle 多次。但这没关系。至少我得到了正确的。非常感谢...:-)
    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    相关资源
    最近更新 更多