PHP'殴打'javascript函数调用?

时间:2012-04-20 02:21:36

标签: php javascript

我有一个奇怪的问题。

我正在创建一个基于位置的网络应用,它使用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

2 个答案:

答案 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()结束之前提交表格。