Javascript 多个地面覆盖的复选框切换
我错过了什么?我已经盯着这件事看了将近三天了,我不知道我做错了什么。我已经尝试了无数来自网络各个部分的例子,文档也没有多大意义——但话说回来,信件开始一起运行。任何指点都会有帮助 下面是我想要开始工作的地方。我有两张地面覆盖图,带有两个复选框。我希望发生的是,如果选中该框,则覆盖显示。如果未选中该框,则覆盖将消失。简单对吧Javascript 多个地面覆盖的复选框切换,javascript,google-maps-api-3,checkbox,Javascript,Google Maps Api 3,Checkbox,我错过了什么?我已经盯着这件事看了将近三天了,我不知道我做错了什么。我已经尝试了无数来自网络各个部分的例子,文档也没有多大意义——但话说回来,信件开始一起运行。任何指点都会有帮助 下面是我想要开始工作的地方。我有两张地面覆盖图,带有两个复选框。我希望发生的是,如果选中该框,则覆盖显示。如果未选中该框,则覆盖将消失。简单对吧 <body onload="initialize()"> <div id="controls"> <input name="ckc1" oncl
<body onload="initialize()">
<div id="controls">
<input name="ckc1" onclick="showcov(rmap1,ckc1);" type="checkbox" checked="true">White Tanks</input>
<input name="ckc2" onclick="showcov(rmap2,ckc2);" type="checkbox" checked="true">Scottsdale</input>
</div>
<div id="map_canvas"></div>
<script language="javascript" type="text/javascript">
var map;
var rmap1,mk1,ckc1;
var rmap2,mk2,ckc2;
function initialize() {
var coord = new google.maps.LatLng( 33.5783309936523,-112.573112487793);
var map = new google.maps.Map(document.getElementById('map_canvas'), {
mapTypeId: google.maps.MapTypeId.TERRAIN,
center: {lat: 33.5783309936523, lng:-112.573112487793},
zoom: 8
});
//White Tanks
var boundaries1 = new google.maps.LatLngBounds(
new google.maps.LatLng( 32.22935,-114.1923),
new google.maps.LatLng( 34.92731,-110.9539));
rmap1 =new google.maps.GroundOverlay("RM77B714BB9248_1.png", boundaries1);
rmap1.setMap(map);
mk1 =new google.maps.Marker({position:new google.maps.LatLng( 33.57832983,-112.57310897),map:map,title:'462.550 Mhz at 50 Watts',draggable:false,zIndex:1});
//Scottsdale
var boundaries2 = new google.maps.LatLngBounds(
new google.maps.LatLng( 32.36672,-113.4623),
new google.maps.LatLng( 35.06469,-110.2188));
rmap2 =new google.maps.GroundOverlay("RM77B714BB9248_4.png", boundaries2);
rmap2.setMap(map);
mk2 =new google.maps.Marker({position:new google.maps.LatLng( 33.715703,-111.840549),map:map,title:'462.600 Mhz at 20 Watts',draggable:false,zIndex:1});
}
//Checkbox Function
function showcov(m,v){if(v.checked) m.setMap(map); else m.setMap(null);}
</script>
</body>
白色坦克
斯科茨代尔
var映射;
变量rmap1、mk1、ckc1;
变量rmap2、mk2、ckc2;
函数初始化(){
var coord=new google.maps.LatLng(33.5783309936523,-112.573112487793);
var map=new google.maps.map(document.getElementById('map_canvas'){
mapTypeId:google.maps.mapTypeId.TERRAIN,
中心:{lat:33.5783309936523,lng:-112.573112487793},
缩放:8
});
//白色坦克
var boundaries1=新的google.maps.LatLngBounds(
新google.maps.LatLng(32.22935,-114.1923),
新的google.maps.LatLng(34.92731,-110.9539));
rmap1=新的google.maps.GroundOverlay(“RM77B714BB9248_1.png”,boundaries1);
rmap1.setMap(map);
mk1=new google.maps.Marker({位置:new google.maps.LatLng(33.57832983,-112.57310897),map:map,标题:“50瓦462.550兆赫”,可拖动:false,zIndex:1});
//斯科茨代尔
var boundaries2=新的google.maps.LatLngBounds(
新的google.maps.LatLng(32.36672,-113.4623),
新的google.maps.LatLng(35.06469,-110.2188));
rmap2=新的google.maps.GroundOverlay(“RM77B714BB9248_4.png”,boundaries2);
rmap2.setMap(map);
mk2=new google.maps.Marker({位置:new google.maps.LatLng(33.715703,-111.840549),map:map,标题:“462.600兆赫,20瓦”,可拖动:false,zIndex:1});
}
//复选框函数
函数showcov(m,v){if(v.checked)m.setMap(map);else m.setMap(null);}
下面的那一层很好用,但只有一层。我不确定我遗漏了什么,但我确信这很简单,因为我对JS和这种方式的映射几乎没有经验
<script type="text/javascript">
var map;
var rmap1,mk1;
function initialize() {
var coord = new google.maps.LatLng( 33.7157020568848,-111.840545654297);
var myOptions = {zoom: 7,center: coord, mapTypeId:
google.maps.MapTypeId.ROADMAP};
map = new google.maps.Map(document.getElementById("map_canvas"),myOptions );
var boundaries1 = new google.maps.LatLngBounds(new google.maps.LatLng( 32.36672,-113.4623), new google.maps.LatLng( 35.06469,-110.2188));
rmap1 =new google.maps.GroundOverlay("RM77B714BB9248_4.png", boundaries1);
rmap1.setMap(map);
mk1 =new google.maps.Marker({position:new google.maps.LatLng( 33.715703,-111.840549),map:map,draggable:false,zIndex:1});
rmap1.setMap(map);
}
function showcov(m,v){if(v.checked) m.setMap(map); else m.setMap(null);}
</script></head>
<body onload="initialize()">
<div id="map_canvas" style="width:100%;height:80%"></div>
<div style="width:100%;height:10%">
<table width="100%"><tr><th colspan="2">Scottsdale 450 MHz**</th></tr><tr> <td bgcolor="#E0E0E0" colspan="2"><form name="form2">
<input type="checkbox" name="ckc1" checked="true" onclick="showcov(rmap1,ckc1);">Scottsdale 450 MHz**</input>
<input type="checkbox" name="ckm1" checked="true" onclick="showcov(mk1,ckm1);">Scottsdale</input>
</form></td></tr></table></div></body>
var映射;
var-rmap1,mk1;
函数初始化(){
var coord=new google.maps.LatLng(33.7157020568848,-111.84054297);
var myOptions={zoom:7,center:coord,mapTypeId:
google.maps.MapTypeId.ROADMAP};
map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
var boundaries1=new google.maps.LatLngBounds(new google.maps.LatLng(32.36672,-113.4623),new google.maps.LatLng(35.06469,-110.2188));
rmap1=新的google.maps.GroundOverlay(“RM77B714BB9248_4.png”,boundaries1);
rmap1.setMap(map);
mk1=new google.maps.Marker({位置:new google.maps.LatLng(33.715703,-111.840549),map:map,draggable:false,zIndex:1});
rmap1.setMap(map);
}
函数showcov(m,v){if(v.checked)m.setMap(map);else m.setMap(null);}
斯科茨代尔450兆赫**
斯科茨代尔450兆赫**
斯科茨代尔
您需要像这样将复选框的引用传递给showcov()
<input name="ckc1" onclick="showcov(rmap1,this);" type="checkbox" checked="true">White Tanks</input>
<input name="ckc2" onclick="showcov(rmap2,this);" type="checkbox" checked="true">Scottsdale</input>
在android上,您可能会使用更简单的setVisible(true)
和setVisible(false)
,但不幸的是,这些功能不适用于web版本您有两个问题:
未捕获类型错误:无法读取未定义的属性“已检查”
。您需要将对复选框的引用传递到函数中(this
工作或删除javascript变量的声明,以便可以使用自动创建的对HTML元素的引用,就像您在“工作”示例中所做的那样)html,
身体,
#地图画布{
身高:100%;
宽度:100%;
边际:0px;
填充:0px
}
白色坦克
斯科茨代尔
var映射;
var-rmap1,mk1;
var-rmap2,mk2;
函数初始化(){
var coord=new google.maps.LatLng(33.5783309936523,-112.573112487793);
map=new google.maps.map(document.getElementById('map_canvas'){
mapTypeId:google.maps.mapTypeId.TERRAIN,
中心:{
纬度:33.5783309936523,
液化天然气:-112.573112487793
},
缩放:8
});
//白色坦克
var boundaries1=新的google.maps.LatLngBounds(
新google.maps.LatLng(32.22935,-114.1923),
新的google.maps.LatLng(34.92731,-110.9539));
rmap1=新的google.maps.GroundOverlay(“https://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg“,边界1);
rmap1.setMap(map);
mk1=新的google.maps.Marker({
位置:新google.maps.LatLng(33.57832983,-112.57310897),
地图:地图,
标题:“50瓦时462.550兆赫”,
可拖动:错误,
zIndex:1
});
//斯科茨代尔
var boundaries2=新的google.maps.LatLngBounds(
新的google.maps.LatLng(32.36672,-113.4623),
新的google.maps.LatLng(35.06469,-110.2188));
rmap2=新的google.maps.GroundOverlay(“https://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg“,边界2);
rmap2.setMap(map);
mk2=新的google.maps.Marker({
位置:新google.maps.LatLng(33.715703,-111.840549),
地图:地图,
标题:“20瓦时462.600兆赫”,
可拖动:错误,
zIndex:1
});
}
//复选框函数
函数showcov(m,v){
如果(v.checked)m.setMap(map);
else m.setMap(空);
}
google.maps.event.addDomListener(窗口“加载”,初始化);
我考虑过这样做,但我想这张地图不会出现在移动设备上,好吧,但是你有一些很好的建议,这些建议在我遇到的另一个问题上帮助了我,这与另一个项目有关-非常感谢!这正是我错过的,谢谢,我很感激!我日以继夜地在这三个项目上工作,每天20多个小时。我总是忘记把地图设为全球地图。
function showcov(m,v){
if(v.checked) {
//m.setMap(map);
m.setOpacity(1);
else {
//m.setMap(null);
m.setOpacity(0);
}
}
var rmap1,mk1; // ckc1;
var rmap2,mk2; // ckc2;
<input id="ckc1" onclick="showcov(rmap1,ckc1);" type="checkbox" checked="true" />White Tanks
<input id="ckc2" onclick="showcov(rmap2,ckc2);" type="checkbox" checked="true" />Scottsdale
var map;
function initialize() {
var coord = new google.maps.LatLng( 33.5783309936523,-112.573112487793);
map = new google.maps.Map(document.getElementById('map_canvas'), {
mapTypeId: google.maps.MapTypeId.TERRAIN,
center: {lat: 33.5783309936523, lng:-112.573112487793},
zoom: 8
});