2012-04-20 37 views
1

我有一个奇怪的问题。PHP'跳动'javascript函数调用?

我正在创建一个基于位置的web应用程序,该应用程序使用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

如果JavaScript触发表单提交,我不明白这是可能的。你可以发布一些代码吗? – F21 2012-04-20 02:22:58

+14

不要问关于代码的问题,然后不要显示代码。 – 2012-04-20 02:24:30

+1

让我们看看代码。我的猜测是'getCoords'中的某些内容是异步的。 – ceejayoz 2012-04-20 02:24:49

回答

2

沿着什么Volkner表示,线,块提交使用提交处理程序(叫preventDefault),然后提交在itsWorking结束。您可以拨打.submit()进行提交,也可以使用AJAX。

+0

完美工作,谢谢 – user182078 2012-04-20 02:57:24

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">,将阻止形式在首位发送(也许你是故意这样做的,因为你想用两种方法提交表单?)。

发生这个问题的原因是页面在geolocator完成它的事情之前卸载(提交表单),但这样,我们停止提交表单,并且仅在geolocator完成它的事情后才调用itsWorking(),所以我们当我们完成了我们想做的一切工作时,请不要在itsWorking()结束时提交表格。