我有一个奇怪的问题。
我正在创建一个基于位置的网络应用,它使用javascript函数来获取用户的GPS坐标。我有一个带有提交按钮的表单,当单击该提交按钮时,该函数被调用(onclick ='getCoords()')。然后javascript将两个隐藏字段(纬度和经度)的值设置为GPS坐标。
我的问题是:PHP正在“打败”javascript,因为字段值没有及时设置,所以每个值都变为0.我做了一堆测试,这是绝对是问题。如果我做一些像设置一个单独的按钮来运行javascript函数,运行表单一切正常。
关于如何解决这个问题的任何想法?
要点:
https://gist.github.com/2425419
答案 0 :(得分:2)
按照Volkner的说法,使用提交处理程序阻止提交(调用preventDefault
),然后在itsWorking
结束时提交。您可以致电.submit()
进行提交,也可以使用AJAX。
答案 1 :(得分:1)
我认为问题的症结在于,<input type="image">
会提交与<input type="submit">
一样确定的表单。
但是,要按原样解决此问题,请将event
作为参数添加到getUserLocation(event)
的调用和声明中。
然后按如下方式编辑您的JavaScript:
function getUserLocation(event) {
event.preventDefault(); // prevents form from submitting
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(itsWorking, notWorking);
}
else {
alert("Dang! Your browser doesn't support finding your location, use the zipcode method below.");
}
};
function itsWorking(position) {
var lat = position.coords.latitude;
var longi = position.coords.longitude;
var finalLat = Math.round(lat*1000000)/1000000
var finalLong = Math.round(longi*1000000)/1000000
$("#longi").val(finalLong);
$("#lati").val(finalLat);
document.getElementById('findoneform').submit(); // submits form since we were successful
};
但就像我最初所说的那样,似乎您使用的是img
代码而不是<input type="image">
,这样会阻止表单首先发送(也许您是故意这样做的,因为你想有两种方式提交表格吗?)。
发生此问题是因为页面在地理定位器完成之前卸载(提交表单),但这样,我们停止提交表单,itsWorking()
仅在地理定位器完成其事后才被调用,所以当我们完成我们想做的所有事情时,我们不会在itsWorking()
结束之前提交表格。