Javascript 在信息窗口google maps v3中添加事件处理程序元素

Javascript 在信息窗口google maps v3中添加事件处理程序元素,javascript,jquery,google-maps-api-3,infowindow,Javascript,Jquery,Google Maps Api 3,Infowindow,嗨,我正在尝试添加到信息窗口中的按钮,我尝试过这样一个事件 var infoWindow = new google.maps.InfoWindow({ content: '<div></br><span class="formatText">Ubicacion del Marcador: </span>' + event.latLng.toString() + '</br> <input type

嗨,我正在尝试添加到信息窗口中的按钮,我尝试过这样一个事件

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');
}
尝试按钮的“onclick”属性

'<input type="button" id="btnPrueba" value="prueba" onclick="removeMarker()"/>'
“”

我的解决办法是使用短超时

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...");
  });

调用一个像@DeeV这样的全局函数看起来确实是最直接的方法(除了把全局名称空间弄脏了一点,这在现在是很不受欢迎的)。jQuery事件委派在没有任何额外设置的情况下确实可以工作,但感觉像是一个更重的函数调用堆栈,以实现相同的目标。e、 g

$("#myMapContainer").on("click", "#btnPrueba", function() {alert "it works";});
然而,在@DeeV的回答之上,坚持全局方法,通常技巧是获取一些上下文值,您可以在该事件处理程序中对这些值进行操作:

  • 一种方法是将参数值嵌入到 信息窗口内容字符串
  • 沿着这些线,在生成每个标记时,按下 它是对数组的引用(也必须是全局的),因此 稍后在处理程序中调用标记API(例如setIcon()等)
e、 g.JS伪代码
var mymarkerary=[];
函数removeMarker(markerIndex){
mymarkerary[markerIndex].setMap(null);
}

对于(int i=0;这是个好主意。它可以工作,但必须是一种让它工作的方法。也感谢你的提问。你的意思是什么?你想在一个按钮点击中添加多个事件吗?我的意思是用jquery或google的listener添加到事件处理程序中maps@Jorge您是否找到了一种方法,可以将事件处理程序动态地添加到InfoWindow?我目前正在努力解决这个问题(使用jQuery添加点击处理程序)。@DarrenCook我唯一能做到这一点的方法是在infowindow@js1568这不是错误,只是不起作用
$("#myMapContainer").on("click", "#btnPrueba", function() {alert "it works";});
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+')"/>' });
}