2012-04-05 61 views
0

我目前有一些代码,当你按下提交按钮时,标记应该放在地图上,根据下拉列表框中的值。我已经这样做了,下拉框中的值将通过PHP代码的GET表单方法进入URL,并将通过参数传递给javascript函数。谷歌标记放置

我遇到的问题是我必须按两次提交按钮才会在地图上显示标记。这是不那么理想,我正在寻找一些帮助来尝试解决这个问题。谢谢。

这是JavaScript函数代码:

function placeMarker(address) 
     {  
      // ... Set up map code here 

      var map = new google.maps.Map(document.getElementById("universityMap"), myOptions); 

      <?php 
       $uniname = $_GET['uninames'];  

       //Get the Uni code according to the uni name 
       $queryUniID = $mysqli->prepare("SELECT IdCode FROM universityid WHERE UniName = ?"); 
       $queryUniID->bind_param('s', $uniname); 
       $queryUniID->execute(); 
       $queryUniID->bind_result($unicode); 
       $queryUniID->fetch(); 
       $queryUniID->close(); 

       //Load the question data into relevant variables 
       $queryQuestions = $mysqli->prepare("SELECT QuestionNo, Answered1, Answered2, Answered3, Answered4, Answered5 FROM nssdata WHERE UniID = ?"); 
      ?> 

      address = address + ", UK"; 
      geocoder.geocode({'address': address}, function(results, status) 
      { 
       if (status == google.maps.GeocoderStatus.OK) 
       { 
        marker = new google.maps.Marker(
        { 
         map: map, 
         position: results[0].geometry.location, 
         title: address, 
         draggable: false 
        }); 
       } 
       else 
       { 
        alert(status); 
       } 
      }); 
     } 

这是我的HTML表单:

 <form action="#" onsubmit="placeMarker(this.uninames.value)" method="get"> 
+0

你试图批量地理编码基于大学预填充地址列表上? – pp19dd 2012-04-05 13:04:54

+0

不,我只根据搜索按钮被按下时下拉列表中的内容做了一个地理编码 – 2012-04-05 13:09:26

+0

为什么在你的JS函数中间有PHP代码? – puckhead 2012-04-05 13:19:26

回答

1

这应该实际工作,前提是你的价值观都在适当的范围内。在测试这个简化版本时,我可以输入地址,点击提交,标记显示正确的位置。

我有几个理论,为什么你在点击两次之前看到结果。

(1)查找等待时间:确保跟踪地理编码器状态并给予足够的时间执行。

(2)故障:在某些地图渲染器中,有时需要循环映射标记。例如,这组连续调用:marker.setMap(null); marker.setMap(map);将隐藏/显示标记,有时会忽略显示。

(3)提交中断:如果界面比您陈述的更复杂且可能会干扰您的表单提交(#)可能需要阻止提交。换句话说,您必须在点击提交后停止浏览器转到#地址,以便让JavaScript/ajax完成其工作。

下面是缩小版的表格;注意返回(false)部分 - 它阻止浏览器地址更改为#。

<form action="#" onsubmit="placeMarker('adr');return(false);" method="get"> 
    <input type="text" id="id_address" /> 
    <input type="submit" /> 
</form> 

请注意,我将此地址简化为文字;在我的实际测试我发送的数据是这样的:

placeMarker(document.getElementById('id_address').value);

+0

非常感谢您的帮助。这与现在的工作非常接近,唯一的问题是,通过将返回false放入on submit部分,地址永远不会被get方法放入url中,这会导致php加载错误的数据 – 2012-04-05 14:26:37