2016-05-05 48 views
0

我在我的代碼中「連接」了我的地圖標記。我的div具有唯一的ID,我的標記與屬性(標題和標記ID)具有相同的ID集。點擊div時有沒有辦法打開標記彈出窗口?這裏是我的代碼:Mapbox:通過點擊地圖外部打開標記的彈出框

$('#alldealers .dealer').each(function(){ 
    t = $(this).find('h2').text(); 
    lat = $(this).find('.lat'); 
    lng = $(this).find('.lng'); 
    userLng = parseFloat($(lng).text()); 
    userLat = parseFloat($(lat).text()); 
    subUniqueNum = $(this).attr('data-link'); 

    L.mapbox.featureLayer({ 
     type: 'Feature', 
     geometry: { 
      type: 'Point', 
      coordinates: [userLng, userLat] 
     }, 
     properties: { 
      title: subUniqueNum, 
      'marker-id': subUniqueNum, 
      'marker-size': 'small', 
      'marker-color': '#f85649', 
     } 
    }).bindPopup('<button class="giveMeDetails" data-attr-scroll="'+subUniqueNum+'">'+t+'</button>').addTo(map); 
}); 

$('.mapicon_wrapper').click(function(e){  
    tot_p = $(this).parent().parent().parent().attr('id');//parent wrapper id:same as marker's ID 
    $root.animate({ 
     scrollTop: $('html').offset().top 
    }, 500, function() { 

     // This is where I need to open the markers popup with the same title as $this parent ID (tot_p) 

    });   
}); 

回答

1

分配一個ID爲標誌,把它在DOM將不可靠的這個方法:如果該標誌是當前觀看的地圖區域之外,也不會存在於DOM中。正確的方法將是

var markerLayer = L.mapbox.featureLayer().addTo(map); 
var markers = []; 
$('#alldealers .dealer').each(function(){ 
    t = $(this).find('h2').text(); 
    lat = $(this).find('.lat'); 
    lng = $(this).find('.lng'); 
    userLng = parseFloat($(lng).text()); 
    userLat = parseFloat($(lat).text()); 
    subUniqueNum = $(this).attr('data-link'); 

    markers.push({ 
     type: 'Feature', 
     geometry: { 
      type: 'Point', 
      coordinates: [userLng, userLat] 
     }, 
     properties: { 
      title: subUniqueNum, 
      id: subUniqueNum, 
      t: t, 
      'marker-size': 'small', 
      'marker-color': '#f85649', 
     } 
    }) 
}); 

markerLayer.setGeoJSON(markers); 

markerLayer.eachLayer(function (layer) { 
    layer.bindPopup('<button class="giveMeDetails" data-attr-scroll="'+layer.feature.properties.title+'">'+layer.feature.properties.t+'</button>'); 
}); 

$('.mapicon_wrapper').click(function(e){  
    var tot_p = $(this).parent().parent().parent().attr('id');//parent wrapper id:same as marker's ID 
    $root.animate({ 
     scrollTop: $('html').offset().top 
    }, 500, function() { 

     // This is where I need to open the markers popup with the same title as $this parent ID (tot_p) 
    markers.eachLayer(function (layer) { 
     if (layer.feature.properties.id === tot_p) { 
     layer.openPopup(); 
     } 
    }); 
    });   
}); 
+0

嗨。感謝您的答案:)我試圖在我的代碼中測試它,但我得到以下錯誤:markers.eachLayer不是一個函數 –

+0

現在已經修復了代碼中的小錯字 – tmcw

相關問題