1

我有一个奇怪的问题。

我正在创建一个基于位置的网络应用程序,它使用 javascript 函数来获取用户的 GPS 坐标。我有一个带有提交按钮的表单,当单击该提交按钮时,该函数被调用(onclick='getCoords()")。然后,javascript 将两个隐藏字段(纬度和经度)的值设置为 GPS 坐标.

我的问题是:PHP 正在“击败”javascript,因为没有及时设置字段值,因此每个值都变为 0。我已经做了一堆测试,这绝对是问题所在. 如果我设置一个单独的按钮来运行 javascript 函数,则运行表单一切正常。

关于如何解决这个问题的任何想法?

要点:

https://gist.github.com/2425419

https://gist.github.com/2425394

https://gist.github.com/2425391

4

2 回答 2

2

按照 Volkner 所说的,使用提交处理程序(调用preventDefault)阻止提交,然后在itsWorking. 您可以调用.submit()提交,也可以使用 AJAX。

于 2012-04-20T02:43:39.777 回答
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()我们完成了我们想做的一切。

于 2012-04-20T02:58:21.987 回答