2016-05-05 15 views
0

私のコードの一部のdivがマップマーカーに「接続」しています。私のdivには固有のIDがあり、マーカーには属性(タイトルとマーカーID)と同じIDが設定されています。 divをクリックするとマーカーポップアップを開く方法はありますか?ここに私のコードは次のとおりです。マップボックス:地図の外側をクリックしてマーカーのポップアップを開く

$('#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

関連する問題