Javascript 嵌套事件处理程序不工作

Javascript 嵌套事件处理程序不工作,javascript,Javascript,我有一个要添加信息窗口的标记。首先,我显示一个下拉列表供用户选择删除操作。当用户单击删除时,我会在信息窗口中显示删除确认提示。正在调用yes/no按钮操作,但我无法使用_this.close()关闭信息窗口。在调试器中,它显示为\u这正确地指向信息窗口,但它没有关闭。下面是代码,overlayObj[pmid]指向一个谷歌标记 this.overlayObj[pmId].listenerHandle[i++]= google.maps.event.addListener(this.overla

我有一个要添加信息窗口的标记。首先,我显示一个下拉列表供用户选择删除操作。当用户单击删除时,我会在信息窗口中显示删除确认提示。正在调用yes/no按钮操作,但我无法使用_this.close()关闭信息窗口。在调试器中,它显示为\u这正确地指向信息窗口,但它没有关闭。下面是代码,overlayObj[pmid]指向一个谷歌标记

this.overlayObj[pmId].listenerHandle[i++]=
google.maps.event.addListener(this.overlayObj[pmId],“右键单击”,
功能(事件){
var contentString=''+
“选择行动”+
“删除”+/+pmId+“>Delete”+
'';
var infowindow=new google.maps.infowindow({
内容:contentString
});
open(_this.overlayObj[pmId].get('map'),_this.overlayObj[pmId]);
google.maps.event.addListener(infowindow,'domready',
函数(){
var_this=这个;
//对接收目录内容的DIV的引用
//使用jQuery的infowindow
var-iwOuter=$('.gm-style-iw');
//css({'background-color':'white'});
//我们要更改的div位于.gm样式的iw div之上。
//因此,我们使用jQuery通过.prev()获得它。
//
var iwBackground=iwOuter.prev();
//删除背景阴影DIV
iwBackground.children(“:n个child(2)”).css({
“显示”:“无”
});
//删除白色背景DIV
iwBackground.children(“:n个child(4)”).css({
“显示”:“无”
});
var叠加=
document.getElementById(“overlayaAction”);
google.maps.event.addDomListener(覆盖操作,“单击”,
功能(事件){
如果(this.value==“删除”){
//清除infowindow上的侦听器
google.maps.event.clearInstanceListeners(_this);
//将infowindow内容设置为删除提示
var confirmString=''+
“删除项目?

”+ “是的”+ “不”; _这个.setContent(confirmString); google.maps.event.addListener(_this,'domready', 函数(){ var_this=这个; 变量删除图标= document.getElementById(“deleteIconButton”); var取消删除图标= document.getElementById(“cancelDeleteIconButton”); google.maps.event.addDomListener(取消删除图标,“单击”, 功能(事件){ _这个。关闭(); google.maps.event.clearInstanceListeners(_this);//清除信息窗口侦听器 }); google.maps.event.addDomListener(删除图标,“单击”, 功能(事件){ _this.close();//关闭信息窗口 google.maps.event.clearInstanceListeners(_this);//清除信息窗口侦听器 CpC.myMap.deleteIcon(pmId);//从映射和数据库中删除图标 }); }); } }); });
});
看起来您正在为同一个
infowindow
处理程序在
domready
处理程序中添加一个
domready
litener。但我认为此事件只为一个窗口触发一次。是的,我是。在用户选择delete后,我将infowindow内容设置为新内容,因此,我需要另一个domready侦听器。这两个事件都会触发,并且最后两个DomainListener在用户单击任意一个按钮时触发。_this.close是对每个按钮操作都不起作用的唯一一行。我想我需要重新组织代码。我只是看不到这样做的方法。当您调用
\u this.close
时,Javascript控制台中是否有错误?没有错误,但我找到了它。而不是设置infowindow内容到新的html,我只是关闭它并创建一个新的infowindow。我还将代码重新构造为两个函数调用,一个函数使用delete下拉菜单创建infowindow,另一个函数使用delete confirmation html创建infowindow。现在我可以将这些函数用于其他小部件。