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,但是虽然它是由函数获取的事件,但警报没有显示。当我使用 chrome 进行调试时,它可以工作:(

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 的回答之上,诀窍通常是获取一些您可以在该事件处理程序中采取行动的上下文值:

  • 一种方法是将参数值嵌入到 InfoWindow 内容字符串中的函数调用中
  • along those lines, as you generate each Marker, push it's reference to an array (also necessarily global) and thereby facilitate Marker API calls later in the handler (e.g. setIcon(), etc.)

e.g. JS Pseudocode

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 回答
0

我的解决方法是使用短暂的超时。

var infoWindow = ...  (as in your question) ...
infoWindow.open(...);

setTimeout(function(){
  $('#btnPrueba').on('click', function(e){
    alert("It works at last!");
    });
  },50);  //Wait for 0.05s

当我不使用setTimeout包装器时,它不起作用。即使setContent()并且open()已经被调用。我认为这意味着创建是异步完成的。

注意:“50”是一个神奇的数字,因此可能很脆弱。

注意:使用以下内容也对我不起作用,我仍然觉得很奇怪并且无法解释:

$('#btnPrueba').on('click', document, function(e){
  alert("No luck...");
  });
于 2014-09-05T08:56:10.427 回答