有人可以帮我理解逻辑并修复它来加载地图吗?

时间:2012-04-02 16:58:34

标签: javascript html

我正在加载地图并将数据库中的标记添加到画布。当我第一次加载页面时,调用函数“load()”,我知道输入'form'为null,因为我有一个表格形式为null的警报。当我在表单字段中按“搜索”时,调用“加载”函数,我知道表单!= null,因为我有一个不同的警报。然而,在我按'ok'查看不同的警报之后,我可以看到使用form = null再次调用load,因为弹出相应的警报。

这是头部加载函数的开始:

//Edit (adding more information for clarity)
//<![CDATA[
var map;
function load(form) {
    if (form != null) {
        alert("Form not null!");
    } else {
        alert("Form is null :-(");
    }


    var myOptions = {
      center: new google.maps.LatLng(42, -70),
      zoom: 3,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map"),myOptions);
    // rest is edited out
}

function addMarkers() {
//************MAP WILL NOT GENERATE WITH THIS SECTION OR ADD MARKERS*************
            microAjax("genjsonphp.php?stdt="+costlow+"&enddt="+costhigh, function(data) {
              var json = JSON.parse(data);
              var points = json;

            for (var i = 0; i<points.length; i++)
                {
                var point = points[i];
                var latlng = new google.maps.LatLng(parseFloat(point.LocationLat)/1000000,parseFloat(point.LocationLon)/1000000);
                    var marker = createMarker(point.House,
                         point.Place,
                         point.Cost,
                         latlng,
                         map);
               }
        });
//************************************************************************************  
    }


function createMarker(House, Place, Cost, latlng, mapsent)
{
    var marker = new google.maps.Marker({
                       position: latlng,
                       map: mapsent,
                       title: House  
                       });
      marker.info = new google.maps.InfoWindow({
      content: House + '<br />' + Place + '<br />' + Cost
    });

    google.maps.event.addListener(marker, 'click', function(){
        marker.info.open(mapsent, marker);
    });
    return marker;
}

//]]>

以下是加载地图并缩小搜索条件的字段:

        <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="2" ALIGN="Center" WIDTH=80%>
       <body onload="load()" onunload="GUnload()">
         <TR>
         <TD>
            <div id="map" style="width: 1250px; height: 750px"></div>
         </TD>
         <TD>

            <form method="post">
            <input type="text" name="search_criteria" id="search_criteria" /> 
            <!--button to modify search criteria-->
            <button type="submit" id="narrow_search_form" name="narrow_search_form" onClick = "addMarkers()">Search</button>
            </form>
            </body>
          </TD>
          </TR>
         </TABLE>

如何修复我的代码,以便在按下搜索按钮时调用load函数一次,并将表单中的信息传递给加载函数?

1 个答案:

答案 0 :(得分:1)

好。我决定写一个答案,因为我开始创建太多评论。

Working example&lt;&lt; - 使用那一个,而不是评论一个。来自评论的Cuz是我的本地人,忘记将其上传到某个地方,一旦我关闭PC就会消失。

根据您放入搜索框的内容,您只能获得包含 - 以某种方式 - 搜索的字词/单词的标记。 尝试将“波兰”“高速公路”

该部分是用PHP制作的:

if($_POST['search_criteria'] == "" || !isset($_POST['search_criteria'])) $result = mysql_query("SELECT lat, lng, search_crit, something_else from markers");
else $result = mysql_query("SELECT lat, lng, search_crit, something_else from markers where search_crit = '$_POST[search_criteria]'");

因此,如果您在搜索框中放置任何内容,则会搜索并从数据库中获取标记,其中“search_crit”列与写入搜索框中的单词相同。这就是一切。如果需要,可以将其作为变量传递给加载:

load('<? echo $_POST["search_criteria"]; ?>')

然后将其用作函数,作为用于比较标记的参数。正如我所说,我需要你的加载功能,知道你是如何创建标记,并比较它们。

此外,我会从onclick at按钮删除 load(this.form),因为无论如何,它都会立即显示页面重新加载。按下后,提交按钮将提交/重新加载页面。 如果您想将其用于检查目的,传递其他功能而不是整个表单。只是文本框值,例如。 Like here!已将按钮更改为不提交一个,用于显示目的

有什么不清楚的吗?想要整个文件/源代码?请在下面评论,ima更新答案。

源文件,保存为* .txt,以便您可以看到实际代码:Source code在连接mysql数据库时更改了登录名和密码,因此我不会向全世界显示它。