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()等)
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+')"/>' });
}