4

こんにちは、情報ウィンドウ内のボタンに、このように試したイベントを追加しようとしています

var infoWindow = new google.maps.InfoWindow({
    content: '<div></br><span class="formatText">Ubicacion del Marcador: </span>' + event.latLng.toString() 
            + '</br> <input type="button" id="btnPrueba" value="prueba"/></div>'
});

google.maps.event.addListener(marker, 'click', function () {
    infoWindow.open(map, this);
    google.maps.event.addDomListener(document.getElementById('btnPrueba'), 'click', removeMarker);
});

function removeMarker(){

    alert('it works');
}

私は何を間違っていますか?またはこれを行う別の方法ですか?ありがとう

編集

私もこのようなjqueryで試してみましたが、関数によって取得されたイベントですが、アラートは表示されません。クロムでデバッグを行うと、動作します:(

google.maps.event.addListener(marker, 'click', function () {
    infoWindow.open(map, this);
    $("#btnPrueba").click(function () {

        alert('funciona');
    });
});
4

3 に答える 3

6

ボタンの「onclick」属性を試してください。

'<input type="button" id="btnPrueba" value="prueba" onclick="removeMarker()"/>'
于 2011-06-08T14:36:08.083 に答える
1

@DeeVが示したようなグローバル関数を呼び出すことは、これに対する最も直接的なショットのように思えます(グローバル名前空間を汚すことを除いて、最近見下されています)。jQuery のイベント委譲は、setTimeout の体操を追加しなくても機能しますが、同じ目標を達成するためのより重い関数呼び出しスタックのように感じます。例えば

$("#myMapContainer").on("click", "#btnPrueba", function() {alert "it works";});

ただし、@DeeVの回答に加えて、グローバルなアプローチに固執すると、多くの場合、そのイベントハンドラーで操作できるコンテキスト値を取得することが秘訣です。

  • 1 つの方法は、InfoWindow コンテンツ文字列の関数呼び出しにパラメーター値を埋め込むことです。
  • これらの行に沿って、各マーカーを生成するときに、その参照を配列 (必然的にグローバル) にプッシュし、それによって後でハンドラーでのマーカー API 呼び出しを容易にします (例: setIcon() など)。

例: JS 擬似コード

var myMarkerArray = [];

function removeMarker(markerIndex) {
  myMarkerArray[markerIndex].setMap(null);
}

for(int i=0; i<myLocationData.length; i++) {
  var marker = new google.maps.Marker({...});
  myMarkerArray.push(marker);
  var popup = new google.maps.InfoWindow({ content: '<input type="button" id="btnPrueba" value="prueba" onclick="removeMarker('+i+')"/>' });
}
于 2016-03-12T01:11:07.117 に答える