Javascript 在Esri映射信息窗口中显示错误的OnClick事件

Javascript 在Esri映射信息窗口中显示错误的OnClick事件,javascript,geocoding,esri,Javascript,Geocoding,Esri,我已经为添加位置创建了Esri映射,在此映射中,用户将搜索位置并找到其地址。当用户选择相关地址时,地图将带到他那里,并显示一个信息窗口,其中包含地址、语言和地段,一个称为“添加位置”的链接。我已经做了以上所有的事情,但在“添加位置”链接上,我分配了一个onClick函数,该函数不起作用,表示函数未定义,请参见浏览器控制台。我不明白为什么会出现这种情况。请看链接 var映射、gsvc、pt; 要求([ “esri/map”、“esri/graphic”、“esri/symbols/SimpleM

我已经为添加位置创建了Esri映射,在此映射中,用户将搜索位置并找到其地址。当用户选择相关地址时,地图将带到他那里,并显示一个信息窗口,其中包含地址、语言和地段,一个称为“添加位置”的链接。我已经做了以上所有的事情,但在“添加位置”链接上,我分配了一个onClick函数,该函数不起作用,表示函数未定义,请参见浏览器控制台。我不明白为什么会出现这种情况。请看链接

var映射、gsvc、pt;
要求([
“esri/map”、“esri/graphic”、“esri/symbols/SimpleMarkerSymbol”,
“esri/tasks/GeometryService”、“esri/tasks/ProjectParameters”,
“esri/SpatialReference”、“esri/InfoTemplate”、“esri/dijit/Search”、“dojo/dom”、“dojo/on”,
“dojo/domReady!”
],功能(
地图、图形、简单标记符号、,
GeometryService、项目参数、,
空间引用、信息模板、搜索、dom等
) {
地图=新地图(“地图”{
基本地图:“街道”,
中间:[77.0167,38.8833],
缩放:9
});
gsvc=新的GeometryService(“https://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
var search=新搜索({
地图:地图
}“搜查”);
search.startup()
搜索。打开(“选择结果”,显示位置);
功能显示位置(e){
map.graphics.clear();
变量点=e.result.feature.geometry;
var ppy=point.getLatitude().toFixed(4);
var ppx=point.getLongitude().toFixed(4);
map.infoWindow.setTitle(“搜索结果”);
map.infoWindow.setContent(e.result.name+'test'+ppy+'、'+ppx+'
'); var s_res=e.result.name console.log(e.result.name); 函数getaddress(){ 警报(“添加位置”); } 最终s_res=s_res.分割(“,”); 对于(i=0;i元素”+i+”的数组是:“+final_s_res[i]); } } });
html,
身体,
#地图,
.map.container{
填充:0;
保证金:0;
身高:100%;
宽度:100%;
}
#信息{
顶部:2个;
颜色:#444;
高度:自动;
字体系列:arial;
字体大小:粗体;
左:69px;
保证金:5px;
填充:10px;
位置:绝对位置;
宽度:260px;
z指数:40;
边框:实心1px#003300;
边界半径:4px;
背景色:#E5;
}
#搜寻{
显示:块;
位置:绝对位置;
z指数:2;
顶部:70像素;
左:74px;
}
/*搜索框修改的开始*/
.arcgisSearch.searchClear{
背景色:#E5;
}
.arcgisSearch.esriIconZoom{
背景图片:url(“finding.png”);
背景尺寸:20px 20px;
}
.esriIconZoom:之前{
内容:“;
}
.arcgisSearch.searchGroup.searchInput,
.arcgisSearch.searchBtn,
.arcgisSearch.noResultsMenu,
.arcgisSearch.Suggestions菜单{
边框:1px实心#003300;
背景色:#E5;
}
.arcgisSearch.noValueText{
颜色:红色;
字体大小:14px;
}
/*弹出窗口修改的开始*/
.esriPopup.titlePane{
背景色:#003300;
边框底部:1px实心#121310;
字体大小:粗体;
}
.esriPopup a{
颜色:#DAE896;
}
.esriPopup.contentPane,
.esriPopup.actionsPane,
.esriPopup.pointer,
.esriPopup.outerPointer{
背景色:#B3;
}

这是因为像
这样写在全局范围内,即在窗口中搜索getaddress。但是您已经在
showlocation
方法中定义了getaddress。因此,要么将getaddress带到全局范围,要么执行以下操作

map.infoWindow.setContent(e.result.name +' test ' + ppy + ',' + ppx + '<br><a id="addloc" href="javascript:;">Add Location</a>');
var s_res = e.result.name
console.log(e.result.name, map.infoWindow);

// this does the magic
map.infoWindow.domNode.querySelector('#addloc').onclick = function getaddress(){  
   alert('location added');
}  

这是因为像
这样写在全局范围内,即在窗口中搜索getaddress。但是您已经在
showlocation
方法中定义了getaddress。因此,要么将getaddress带到全局范围,要么执行以下操作

map.infoWindow.setContent(e.result.name +' test ' + ppy + ',' + ppx + '<br><a id="addloc" href="javascript:;">Add Location</a>');
var s_res = e.result.name
console.log(e.result.name, map.infoWindow);

// this does the magic
map.infoWindow.domNode.querySelector('#addloc').onclick = function getaddress(){  
   alert('location added');
}  


[link]@AmmarHasan[link]@AmmarHasanI无法将函数发送到show location方法之外,因为它将地址存储在变量中,这些变量将在add location事件后反映到输入字段中。我希望这对我有用。我不能将函数发送到show location方法之外,因为将地址存储在变量中,这些变量将在add location事件后反映到输入字段中。我希望这对我有用。