Google Map v2では、GMarkerの情報ウィンドウでテキストをクリックしたときに関数をトリガーできるようにしたいと思います。
$(".foo").click(myFunction);
...
marker.openInfoWindowHtml("<span class=\"foo\">myText</span>");
動作しません。イベントがインフォウィンドウ内でキャッチされないのはなぜですか?
Google Map v2では、GMarkerの情報ウィンドウでテキストをクリックしたときに関数をトリガーできるようにしたいと思います。
$(".foo").click(myFunction);
...
marker.openInfoWindowHtml("<span class=\"foo\">myText</span>");
動作しません。イベントがインフォウィンドウ内でキャッチされないのはなぜですか?
KevinGorskiが説明したように動作させることができませんでした...
jquery1.9.1およびmapsapiv = 3.expを使用すると、次のように機能します。
infowindow.setContent('<a href="#" id="test">test</a>');
google.maps.event.addDomListener(infowindow, 'domready', function() {
$('#test').click(function() {
alert("Hello World");
});
});
あなたの例のように、openInfoWindowHtmlの呼び出しの前にイベントバインディング呼び出しが呼び出された場合、最初の呼び出しがクラス「foo」の要素を探していたときにスパンがDOMになかったため、ハンドラーはアタッチされませんでした。
そのイベントハンドラーをopenInfoWindowHtmlの後に呼び出されるように移動するか、「ライブ」イベントバインディングを使用して、jQueryが指定されたセレクターで新しい要素についてDOMを監視するようにすることができます。
$(".foo").live('click', myFunction);
私の知る限り、GMapsはプログラムでコンテンツをインフォウィンドウに挿入するため、イベント委任を使用しない限り、挿入された要素のバインドされたイベントハンドラーは起動しません。
$(".foo").live("click", myFunction);
live
イベントハンドラーを参照してください。
これを試して:
google.maps.event.addListener(infowindow,"**domready**",function() {
var Cancel = document.getElementById("Cancel");
var Ok = document.getElementById("Ok");
google.maps.event.addDomListener(Cancel,"click",function() {
infowindow.close();
});
google.maps.event.addDomListener(Ok,"click",function() {
infowindow.close();
console.log(position);
codeLatLng(position);
});
});
簡単な解決策と私のために働きます。スパンでonclickイベントを使用します。
<span class=\"foo\" onclick="test()">myText</span>
function test(){
alert('test OK');
}
最も単純で完全に説明されているソリューション。
infoWindow自体には、一意のIDを持つプレースホルダーdivのみを含める必要があります。
<InfoWindow
marker={this.state.activeMarker}
visible={this.state.showingInfoWindow}
onOpen={e => {
this.onInfoWindowOpen(this.props, e);
}}
>
<div id="xyz" />
</InfoWindow>
また、 Mapcontainer内で、onInfoWindowOpenコールバックを定義します。このコールバックは、onClickイベントを含む単一のコンポーネント/コンテナーを挿入し、それをプレースホルダーdivにレンダリングします。
onInfoWindowOpen = () => {
const button = (<button
onClick={
() => {
this.viewClinic(this.state.selectedPlace.slug)
}
}>
View Details
</button>);
ReactDOM.render(React.Children.only(button),document.getElementById("xyz"));
}
実例は次のとおりです。
もう1つの完全な例MAP、マーカー、およびインフォウィンドウ:
ご不明な点がございましたらコメントください。