2017-11-24 19 views
1

私はマーカーを作成し、ポップアップをバインドする関数を持っています。 1回のマウスクリックでポップアップを開き、閉じることができます。 何が起こるかは、最初のクリックでポップアップが開かないということです。 2回目のクリックとその後のすべてのクリックがジョブを実行します。ブラウザコンソールにエラーはありません。何が問題なの?ここでリーフレットのポップアップが最初のクリックで開かない

はコードです:

function addPlace() { 
    var myIcon = L.icon({ 
     iconUrl: 'images/store.png', 
     iconSize: [45, 47], 
     iconAnchor: [22, 94], 
     popupAnchor: [-3, -76], 
    }); 

    var popup1 = L.popup() 
     .setLatLng([32.07753, 34.76988]) 
     .setContent("Best shop<br>Food, drinks and more") 

    var shop = L.marker([32.07714, 34.76988], {icon: myIcon}) 
     .on('click', function() { shop.bindPopup(popup1); }) 
     .addTo(mymap); 
}; 

答えて

0

あなたが最初の時間をクリックするまで、あなたがポップアップ結合されていません。

var shop = L.marker([32.07714, 34.76988], {icon: myIcon}) 
    .on('click', function() { shop.bindPopup(popup1); }) 

最初のクリックでポップアップISNとして、ポップアップをバインド最初のクリックの前に拘束されていても、それは誘発しません。

もう一度クリックすると、ポップアップがアクティブになり、マーカーにバインドされます。このため、2回のクリックが必要です。あなたはそれを追加するとき

あなたはAPIドキュメントから、層にポップアップをバインドすることができます。

すべての層がそれにポップアップを結合するための便利なメソッドのセットを共有しています。

var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map); 
layer.openPopup(); layer.closePopup(); 

ポップアップも自動的層が 上でクリックされたときに開かれ、層がマップまたは別のポップアップから削除されたときに閉じられます が開かれます。 (api docs

したがって、実際にイベントリスナーを明示的に使用する必要はありません。その結果、あなたが行うことができるはず

var shop = L.marker([32.07714, 34.76988], {icon: myIcon}) 
    .bindPopup(popup1) 
    .addTo(mymap); 

あなたはそれがバインドされているポップアップ開く場合は、現在の実装を保つことができる:.on('click', function() { shop.bindPopup(popup1).openPopup(); })を、それぞれ、それを再バインドする必要はないようですクリック

+0

ありがとう! click、addTo(mymap)の部分のバインディングを削除しました。 –

関連する問題