嗨我正试图在信息窗口中添加一个按钮,我尝试了这样的事件
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');
});
});
答案 0 :(得分:5)
尝试按钮的“onclick”属性。
'<input type="button" id="btnPrueba" value="prueba" onclick="removeMarker()"/>'
答案 1 :(得分:1)
调用像@ DeeV这样的全局函数看起来确实看起来像是最直接的镜头(除了弄脏全局命名空间这些天被忽视的微笑)。 jQuery事件委托在没有任何额外的setTimeout体操的情况下工作,但感觉就像一个较重的函数调用堆栈来实现相同的目标。 e.g。
$("#myMapContainer").on("click", "#btnPrueba", function() {alert "it works";});
然而,在@ DeeV的答案之上,坚持使用全局方法,通常的诀窍是获得一些您可以在该事件处理程序中处理的上下文值:
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+')"/>' });
}
答案 2 :(得分: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()
。我认为这意味着创建是异步完成的。
注意:&#34; 50&#34;是一个神奇的数字,所以可能很脆弱。
注意:使用以下内容也 not 为我工作,我仍然觉得很奇怪,无法解释:
$('#btnPrueba').on('click', document, function(e){
alert("No luck...");
});