ポップアップコンテンツラッパーはイベントの伝播を防ぎますが、ポップアップ内部マークアップ内のイベントはうまく伝播します。ポップアップ要素がマップ上に表示されたとき(およびDOMの一部になったとき)にポップアップ要素にイベントを追加できます。リーフレットイベントpopupopen
を見てください。
var map = L.map('map').setView([51.505, 10], 7); //for example
//the .on() here is part of leaflet
map.on('popupopen', function() {
$('a .smallPolygonLink').click(function(e){
console.log("One of the many Small Polygon Links was clicked");
});
});
http://jsfiddle.net/tJGQ7/2/
これは私にとって魔法のように動作します。あなたのポップアップに'a .smallPolygonLink'
がない場合、上記のコードは何もしません。 このコードは、ポップアップの起動時に実行されます。しかし、ポップアップが閉じるとDOMノードが破棄されるので、要素に複数のハンドラを接続することを心配する必要はありません。
もっと一般的な方法があります。ただし、eval()
が含まれます。 自己責任において使用してください。しかし、JSが含まれている部分のページをAJAXloadingとき、あなたはあなたの教化のために私が提示するように、「あなたのリーフレットのポップアップ内のJSを実行する」、同じリスクを実行します。
map.on('popupopen', function(){
var cont = document.getElementsByClassName('leaflet-popup-content')[0];
var lst = cont.getElementsByTagName('script');
for (var i=0; i<lst.length;i++) {
eval(lst[i].innerText)
}
});
デモ:http://jsfiddle.net/tJGQ7/4/
は今、あなたは書くことができます。
var popup_content = 'Testing the Link: <a href="#" class="speciallink">TestLink</a><script> $(".speciallink").on("click", function(){alert("hello from inside the popup")});</script>';
marker.bindPopup(popup_content);
どのように私はクリックできないテキストやコンテンツを追加するために、これを修正するのでしょうか?例えば。名前:xxxx、年齢:xxxx、詳細についてはリンクをクリックしてください。 「リンク」という言葉だけがクリック可能です。また、[0]部分は何をしていますか? jquery click apiで参照が見つかりません。 – Josh
@Josh他の要素をクリック可能な要素とともに追加するだけです。 http://jsfiddle.net/2XfVc/8/リーフレットはjQueryコレクションではなく標準DOMノードを受け入れるので、 '[0]'部分は単にjQueryコレクションからDOMノードを取得します。 –
私は '.text()'の代わりに '.html()'に変更し、いくつかのHTML書式が表示されるようにしましたが、それ以外は完璧でした。ありがとう。 – Josh