Javascript 隐藏/显示地图标记

Javascript 隐藏/显示地图标记,javascript,html,google-maps-api-3,Javascript,Html,Google Maps Api 3,我想知道是否有人能帮忙 我正在尝试编写一个脚本来隐藏和显示地图上的位置。我一直使用的主机代码是,我的代码如下所示: !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com

我想知道是否有人能帮忙

我正在尝试编写一个脚本来隐藏和显示地图上的位置。我一直使用的主机代码是,我的代码如下所示:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Google Maps Javascript API v3 Example: Marker Categories</title> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
    <title>Google Maps</title>
<style type="text/css">
html, body { height: 100%; } 
</style>
    <script type="text/javascript">
            var customIcons = {
            "Artefact": {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png',
            shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            },
            "Coin": {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png',
            shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            },
            "Jewellery": {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_yellow.png',
            shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            },
            "Precious Metal": {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png',
            shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            }
            };

      // this variable will collect the html which will eventually be placed in the side_bar 
      var side_bar_html = ""; 

      var gmarkers = [];
      var map = null;

var infowindow = new google.maps.InfoWindow(
  { 

          // A function to create the marker and set up the event window
function createMarker(point,findname,html,findcategory) {
    var contentString = html;
    var marker = new google.maps.Marker({
        position: point,
        var icon = customIcons[findcategory],
        shadow: iconShadow,
        map: map,
        title: findname,
        zIndex: Math.round(latlng.lat()*-100000)<<5
        });
        // === Store the category and name info as a marker properties ===
        marker.mycategory = findcategory;                                 
        marker.myname = findname;
        gmarkers.push(marker);

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(contentString); 
        infowindow.open(map,marker);
        });
}

      // == shows all markers of a particular category, and ensures the checkbox is checked ==
      function show(findcategory) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == findcategory) {
            gmarkers[i].setVisible(true);
          }
        }
        // == check the checkbox ==
        document.getElementById(findcategory+"box").checked = true;
      }

      // == hides all markers of a particular category, and ensures the checkbox is cleared ==
      function hide(findcategory) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == findcategory) {
            gmarkers[i].setVisible(false);
          }
        }
        // == clear the checkbox ==
        document.getElementById(findcategory+"box").checked = false;
        // == close the info window, in case its open on a marker that we just hid
        infowindow.close();
      }

      // == a checkbox has been clicked ==
      function boxclick(box,findcategory) {
        if (box.checked) {
          show(findcategory);
        } else {
          hide(findcategory);
        }
        // == rebuild the side bar
        makeSidebar();
      }

      function myclick(i) {
        google.maps.event.trigger(gmarkers[i],"click");
      }


      // == rebuilds the sidebar to match the markers currently displayed ==
      function makeSidebar() {
        var html = "";
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].getVisible()) {
            html += '<a href="javascript:myclick(' + i + ')">' + gmarkers[i].myname + '<\/a><br>';
          }
        }
        document.getElementById("side_bar").innerHTML = html;
      }

  function initialize() {
    var myOptions = {
      zoom:6,  
      center: new google.maps.LatLng(54.312195845815246,-4.45948481875007),
      mapTypeId: google.maps.MapTypeId.TERRAIN
    }
    map = new google.maps.Map(document.getElementById("map"), myOptions);


    google.maps.event.addListener(map, 'click', function() {
        infowindow.close();
        });



      // Read the data
  downloadUrl("loadpublicfinds.php", function(data) { 
            var xml = data.responseXML; 
  var markers = xml.documentElement.getElementsByTagName("marker");

        for (var i = 0; i < markers.length; i++) {
          // obtain the attribues of each marker
          var lat = parseFloat(markers[i].getAttribute("findosgb36lat"));
          var lng = parseFloat(markers[i].getAttribute("findosgb36lon"));
          var point = new google.maps.LatLng(lat,lng);
          var findname = markers[i].getAttribute("findname");
          var finddescription = markers[i].getAttribute("finddescription");
          var html = "<b>" + 'Find : ' + "</b>" + findname + "<p>" + "<b>" + 'Description: ' + "</b>" + finddescription + "</p>"
          var findcategory = markers[i].getAttribute("findcategory");
          // create the marker
          var marker = createMarker(point,findname,html,findcategory);
        }

        // == show or hide the categories initially ==
        show("Artefact");
        hide("Coin");
        hide("Jewellery");
        hide("Precious Metal");
        // == create the initial sidebar ==
        makeSidebar();
      });
    }

    </script>
  </head>
<body style="margin:0px; padding:0px;" onload="initialize()"> 




    <!-- you can use tables or divs for the overall layout -->
    <table border=1>
      <tr>
        <td>
           <div id="map" style="width: 550px; height: 450px"></div>
        </td>
        <td valign="top" style="width:150px; text-decoration: underline; color: #4444ff;"> 
           <div id="side_bar"></div>
        </td>
      </tr>
    </table>
    <form action="#">
      Artefact: <input type="checkbox" id="Artefactbox" onclick="boxclick(this,'Artefact')" /> &nbsp;&nbsp;
      Coin: <input type="checkbox" id="Coinbox" onclick="boxclick(this,'Coin')" /> &nbsp;&nbsp;
      Jewellery: <input type="checkbox" id="Jewellerybox" onclick="boxclick(this,'Jewellery')" /><br />
      Precious Metal: <input type="checkbox" id="PreciousMetalbox" onclick="boxclick(this,'Precious_Metal')" /><br />
    </form>  

  </body>

</html>
我对此相当陌生,但我已经通过“Firebug”运行了代码,它声明了行id“missing:propertyid”,但我必须承认我不确定这是什么意思

我只是想知道是否有人可以看看这个,请让我知道我错在哪里

非常感谢

更新代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Map My Finds - Public Finds</title>
        <link rel="stylesheet" href="css/publicfinds.css" type="text/css" media="all" />
        <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=en"></script>
        <script type="text/javascript"> 
            var customIcons = {
            "Artefact": {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png',
            shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            },
            "Coin": {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png',
            shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            },
            "Jewellery": {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_yellow.png',
            shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            },          "Precious Metal": {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png',
            shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            }
            };

               // this variable will collect the html which will eventually be placed in the side_bar 
      var side_bar_html = ""; 

      var gmarkers = [];      var markers;

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


function createMarker(latlng,name,html,category) { var contentString = html; var marker = new google.maps.Marker({  position: point,  icon: customIcons[findcategory],  shadow: iconShadow,  map: map,  title: findname,  zIndex: Math.round(latlng.lat()*-100000)<<5  }); 

     // === Store the category and name info as a marker properties ===
        marker.mycategory = findcategory;                             

        marker.myname = findname;
        gmarkers.push(marker);

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(contentString); 
        infowindow.open(map,marker);
        });

      // == shows all markers of a particular category, and ensures the checkbox is checked ==
      function show(findcategory) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == findcategory) {
            gmarkers[i].setVisible(true);
          }
        }
        // == check the checkbox ==
        document.getElementById(findcategory+"box").checked = true;
      }

      // == hides all markers of a particular category, and ensures the checkbox is cleared ==
      function hide(findcategory) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == findcategory) {
            gmarkers[i].setVisible(false);
          }
        }
        // == clear the checkbox ==
        document.getElementById(findcategory+"box").checked = false;
        // == close the info window, in case its open on a marker that we just hid
        infowindow.close();
      }

      // == a checkbox has been clicked ==
      function boxclick(box,findcategory) {
        if (box.checked) {
          show(findcategory);
        } else {
          hide(findcategory);
        }
        // == rebuild the side bar
        makeSidebar();
      }

      function myclick(i) {
        google.maps.event.trigger(gmarkers[i],"click");
      }


      // == rebuilds the sidebar to match the markers currently displayed ==
      function makeSidebar() {
        var html = "";
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].getVisible()) {
            html += '<a href="javascript:myclick(' + i + ')">' + gmarkers[i].myname + '<\/a><br>';
          }
        }
        document.getElementById("side_bar").innerHTML = html;
      }                 function load() { 
            var map = new google.maps.Map(document.getElementById("map"), { 
            center: new google.maps.LatLng(54.312195845815246,-4.45948481875007), 
            zoom:6, 
            mapTypeId: 'terrain' 
            }); 


    google.maps.event.addListener(map, 'click', function() {
        infowindow.close();
        });

            // Change this depending on the name of your PHP file 
            downloadUrl("loadpublicfinds.php", function(data) { 
            var xml = data.responseXML; 
            var markers = xml.documentElement.getElementsByTagName("marker");
            for (var i = 0; i < markers.length; i++) { 
            var lat = parseFloat(markers[i].getAttribute("findosgb36lat"));
            var lng = parseFloat(markers[i].getAttribute("findosgb36lon"));             var point = new google.maps.LatLng(lat,lng);            var findcategory = markers[i].getAttribute("findcategory");             var findname = markers[i].getAttribute("findname");             var finddescription = markers[i].getAttribute("finddescription");
            var html = "<b>" + 'Find : ' + "</b>" + findname + "<p>" + "<b>" + 'Description: ' + "</b>" + finddescription + "</p>"
            var marker = createMarker(point,findname,html,findcategory);
        }
      // == show or hide the categories initially ==
        show("Artefact");
        hide("Coin");
        hide("Jewellery");      hide("Precious Metal");
        // == create the initial sidebar ==
        makeSidebar();
      });
    }
            function downloadUrl(url, callback) { 
            var request = window.ActiveXObject ? 
            new ActiveXObject('Microsoft.XMLHTTP') : 
            new XMLHttpRequest; 

            request.onreadystatechange = function() { 
            if (request.readyState == 4) { 
            request.onreadystatechange = doNothing; 
            callback(request, request.status); 
            } 
            }; 

            request.open('GET', url, true); 
            request.send(null); 
            } 

            function doNothing() {} 
            }
            </script>  </head>     <body onLoad="load()">
                <div id="map"></div> <!-- you can use tables or divs for the overall layout --> <form action="#">
      Theatres: <input type="checkbox" id="Artefact" onclick="boxclick(this,'Artefact')" /> &nbsp;&nbsp;
      Golf Courses: <input type="checkbox" id="Coin" onclick="boxclick(this,'Coin')" /> &nbsp;&nbsp;
       Golf Courses: <input type="checkbox" id="Jewellery" onclick="boxclick(this,'Jewellery')" /> &nbsp;&nbsp;
      Tourist Information: <input type="checkbox" id="Precious Metal" onclick="boxclick(this,'Precious Metal')" /><br />
       </form>       </body>  </html>

映射我的发现-公共发现
var customIcons={
“人工制品”:{
图标:'http://labs.google.com/ridefinder/images/mm_20_red.png',
影子:'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
},
“硬币”:{
图标:'http://labs.google.com/ridefinder/images/mm_20_green.png',
影子:'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
},
“珠宝”:{
图标:'http://labs.google.com/ridefinder/images/mm_20_yellow.png',
影子:'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
}“贵金属”:{
图标:'http://labs.google.com/ridefinder/images/mm_20_blue.png',
影子:'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
}
};
//此变量将收集最终放置在侧栏中的html
var side_bar_html=“”;
var gmarkers=[];var标记;
var infowindow=new google.maps.infowindow();

函数createMarker(latlng,name,html,category){var contentString=html;var marker=new google.maps.marker({position:point,icon:customIcons[findcategory],shadow:iconShadow,map:map,title:findname,zIndex:Math.round(latlng.lat()*-100000)我注意到两个语法错误:

1.)所有代码都包装在InfoWindow对象中

更改此项:

var infowindow = new google.maps.InfoWindow(
  { 
 var marker = new google.maps.Marker({
        position: point,
        var icon = customIcons[findcategory], //wont work
        shadow: iconShadow,
        map: map,
        title: findname,
        zIndex: Math.round(latlng.lat()*-100000)<<5
        });
为此:

var infowindow = new google.maps.InfoWindow();
 var marker = new google.maps.Marker({
        position: point,
        icon: customIcons[findcategory],
        shadow: iconShadow,
        map: map,
        title: findname,
        zIndex: Math.round(latlng.lat()*-100000)<<5
        });
2.)标记中的图标属性设置错误

更改此项:

var infowindow = new google.maps.InfoWindow(
  { 
 var marker = new google.maps.Marker({
        position: point,
        var icon = customIcons[findcategory], //wont work
        shadow: iconShadow,
        map: map,
        title: findname,
        zIndex: Math.round(latlng.lat()*-100000)<<5
        });

我建议您将所有脚本放在一个单独的文件中,然后使用
标记引用它。这将使该文件在将来更易于维护和故障排除。

您好,衷心感谢您查看并回复我的帖子。将您的更改合并到该页面中后,该页面现在看起来好多了。不过,我现在正在重新注册接收到以下错误“第129行应为对象字符3”,即这一行:“downloadUrl(“loadpublicfinds.php”),函数(数据){'Firebug告诉我下载URL没有定义,但是我正在为其他页面运行这个脚本&除了字段名,它完全相同。我想它可能是前面的'var markers…'行,所以我把它改成了一个全局变量,没有任何运气。你有什么想法吗?尊敬的。我不知道你在哪里定义了道琼斯指数nloadURL()函数。这就是为什么会出现错误。此函数是否在另一个脚本中,而您可能在此页面上没有引用?您好,非常感谢您这么快的回复。此函数未在页面中定义。正如我前面所说,我在其他几页中使用了此脚本,没有任何问题。代码源于此我回到了其他正在工作的脚本,这里找到了最初的“删除标记”演示。我看到的唯一区别是,最初的脚本说:downloadUrl(“categories.xml”,function(doc){var xml=xmlParse(doc);可能是这样吗?向您致意。我查看了您工作示例的源代码。顶部是has
这是定义downloadURL函数的地方。这一行未包含在该问题的页面中。答案已更新。看起来您仍然有语法错误。