Javascript 将两个事件处理程序合并为一个?

Javascript 将两个事件处理程序合并为一个?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,这是我的谷歌地图代码,页面上有带标记的谷歌地图和带所有位置的表格,标记用于地图下方 var locations = []; locations.push($key = [33.8202404, -118.3010964, "House One", "Description ..."); locations.push($key = [33.9283115, -118.2940694, "House Two", "Description ..."); locations.push($key = [

这是我的谷歌地图代码,页面上有带标记的谷歌地图和带所有位置的表格,标记用于地图下方

var locations = [];

locations.push($key = [33.8202404, -118.3010964, "House One", "Description ...");
locations.push($key = [33.9283115, -118.2940694, "House Two", "Description ...");
locations.push($key = [33.9221547, -118.3076608, "House Three", "Description ...");

var infowindow = new google.maps.InfoWindow({});

var markers = [];

for (i = 0; i < locations.length; i++) {

    markers[i] = new google.maps.Marker({
        position: new google.maps.LatLng(locations[i][0], locations[i][1]),
        map: map,
        icon: "http://chart.apis.google.com/chart?chst=d_map_spin&chld=0.55|0|6b90ff|12.5|_|" + (i+1),
        title: locations[i][2]
    });

    pano_marker = new google.maps.Marker({
        position: new google.maps.LatLng(locations[i][0], locations[i][1]),
        map: panorama,
        icon: "http://chart.apis.google.com/chart?chst=d_map_spin&chld=2.5|0|6b90ff|55|_|" + (i+1)
    });

    google.maps.event.addListener(markers[i], 'click', (function(marker, i) {
        return function() {

            map.panTo(this.getPosition());

            infowindow.setContent(locations[i][3]);
            infowindow.open(map, marker);

            getPanoramaInfo({location: this.getPosition(), radius: 50});

        }

    })(markers[i], i));


    //ALMOST DUPLICATE CODE, IS THERE WAY TO NOT REPEAT IT TWICE?

    document.getElementById("table_marker[" + i + "]").addEventListener('click', function() {

            index = this.id.substring(7,8);

            map.panTo(markers[index].position);

            infowindow.setContent(locations[index][3]);
            infowindow.open(map, markers[this.id.substring(7,8)]);

            getPanoramaInfo({location: markers[index].position, radius: 50});

    });

}
var位置=[];
地点。推送($key=[33.8202404,--118.3010964,“一号房屋”,“说明…”);
地点。推送($key=[33.9283115,--118.2940694,“第二号房屋”,“说明…”);
地点。推送($key=[33.9221547,--118.3076608,“三号楼”,“描述…”);
var infowindow=new google.maps.infowindow({});
var标记=[];
对于(i=0;i
当我点击
时,它就像点击地图上的标记一样

<div id="table_marker[0]">House One</div>
<div id="table_marker[1]">House Two</div>
<div id="table_marker[2]">House Three</div>
一号楼
第二座
三号楼

基本上,我有两个事件处理程序,一个用于映射标记,另一个用于
,它们非常相似。有没有办法以某种方式将它们组合成一个事件处理程序?

不确定是否可以将这两个事件处理程序合并成一个,但如果第二个事件处理程序只是触发corr的单击事件,则可以轻松避免重复的代码对应的标记。类似于

document.getElementById("table_marker[" + i + "]").addEventListener('click', function() {
    index = this.id.substring(7,8);
    google.maps.event.trigger(markers[index], 'click');
});
概念验证

var映射,信息窗口;
var位置=[];
var标记=[];
位置。推送([33.8202404,-118.3010964,“一号房屋”,“说明1…”);
地点。推送([33.9283115,-118.2940694,“第二号房屋”,“说明2…”);
地点。推送([33.9221547,-118.3076608,“三号楼”,“说明3…”);
函数initMap(){
map=new google.maps.map(document.getElementById('map'){
中心:{lat:33.9283115,lng:-118.2940694},
缩放:10
});
infowindow=new google.maps.infowindow();
位置。forEach(功能(loc,i){
markers[i]=新的google.maps.Marker({
位置:新google.maps.LatLng(位置[0],位置[1]),
地图:地图,
图标:“http://chart.apis.google.com/chart?chst=d_map_spin&chld=0.55|0 | 6b90ff | 12.5 | | |“+(i+1),
标题:loc[2]
});
(功能(标记、i、内容){
google.maps.event.addListener(标记,'click',函数(ev){
map.panTo(marker.getPosition());
infowindow.setContent(content);
信息窗口。打开(地图、标记);
});
document.getElementById(“表_标记[“+i+”])).addEventListener('click',function()){
google.maps.event.trigger(标记“click”);
});
})(标记[i],i,loc[3]);
});
}
#地图{
身高:50%;
}
/*可选:使示例页面填充窗口*/
html,正文{
身高:100%;
保证金:0;
填充:0;
}

一号楼
第二座
三号楼

不确定是否可以将这两个事件处理程序合并为一个,但如果第二个事件处理程序仅触发相应标记的单击事件,则可以轻松避免重复的代码。类似于

document.getElementById("table_marker[" + i + "]").addEventListener('click', function() {
    index = this.id.substring(7,8);
    google.maps.event.trigger(markers[index], 'click');
});
概念验证

var映射,信息窗口;
var位置=[];
var标记=[];
位置。推送([33.8202404,-118.3010964,“一号房屋”,“说明1…”);
地点。推送([33.9283115,-118.2940694,“第二号房屋”,“说明2…”);
地点。推送([33.9221547,-118.3076608,“三号楼”,“说明3…”);
函数initMap(){
map=new google.maps.map(document.getElementById('map'){
中心:{lat:33.9283115,lng:-118.2940694},
缩放:10
});
infowindow=new google.maps.infowindow();
位置。forEach(功能(loc,i){
markers[i]=新的google.maps.Marker({
位置:新google.maps.LatLng(位置[0],位置[1]),
地图:地图,
图标:“http://chart.apis.google.com/chart?chst=d_map_spin&chld=0.55|0 | 6b90ff | 12.5 | | |“+(i+1),
标题:loc[2]
});
(功能(标记、i、内容){
google.maps.event.addListener(标记,'click',函数(ev){
map.panTo(marker.getPosition());
infowindow.setContent(content);
信息窗口。打开(地图、标记);
});
document.getElementById(“表_标记[“+i+”])).addEventListener('click',function()){
google.maps.event.trigger(标记“click”);
});
})(标记[i],i,loc[3]);
});
}
#地图{
身高:50%;
}
/*可选:使示例页面填充窗口*/
html,正文{
身高:100%;
保证金:0;
填充:0;
}

一号楼
第二座
三号楼