0

使用 jquery 1.7.2、jquery-tools 1.2.7 和 googlemaps api v3

首先,这是我在 googlemaps 中创建标记的代码片段:

function createMarker(latlng, id) {
var marker = new google.maps.Marker({
    map: googleMap,
    position: latlng,
    });

marker.set('id', id);

google.maps.event.addListener(marker, 'click', function() {               
  property_id = marker.get('id');

  alert("add listener -> " + property_id);
            $("#contentWrapBeta").overlay({
                      mask: {
                        color: '#ebecff',
                            loadSpeed: 100,
                            opacity: 0.5
                            },
                          effect: 'apple',
                          left: '2%',
                          top: '5%',
                          load: false,

                  onBeforeLoad: function() {

                  alert("on before load" + property_id);
                 var wrap = this.getOverlay().find(".contentWrap");
                 wrap.load('details.php?id=' + property_id);

                        }

              });

            alert("overlay.load ->" + property_id);
  $("#contentWrapBeta").overlay().load();

});

markers.push(marker);
}

因此,当我单击第一个标记时,警报“添加侦听器”会以正确的 property_id 触发,“加载前开启”警报具有正确的属性 ID,并且“overlay.load”具有正确的 ID,出现弹出窗口,一切都很好....

当我单击地图上的第二个标记时,“添加侦听器”警报显示正确的 ID(我设置的新标记 ID),“overlay.load”也是正确的,但是,

“加载前开启”警报具有先前的标记 property_id (!) - 无论我尝试什么,我似乎都无法用我单击的新标记 id 更新它,它“卡在”第一个标记 property_id 上 - 所以 wrap.load () 调用具有相同的 &id= 变量。

谁能告诉我为什么 - 它已经困扰我好几天了!我似乎无法解决它。

非常感谢

4

1 回答 1

0

啊我明白了

感谢 irc.freenode.org 上 #jquery 上的 shonky

似乎我需要将 data() 添加到我的覆盖定义中

我改变了这个:

    $("#contentWrapBeta").overlay({
                  mask: {
                  ....,
              onBeforeLoad: function() {
              alert("on before load" + property_id);
              var wrap = this.getOverlay().find(".contentWrap");
              wrap.load('details.php?id=' + property_id);

             }

          });

$("#contentWrapBeta").data('property_id', property_id).overlay({
                  mask: {
                  ....,
              onBeforeLoad: function() {
                  var propertyA_id = $('#contentWrapBeta').data('property_id');
                  alert("on before load" + propertyA_id);
                  var wrap = this.getOverlay().find(".contentWrap");
                  wrap.load('details.php?id=' + propertyA_id);

                  }

          });
于 2012-06-03T20:39:34.330 回答