0

我是一个 javascript 菜鸟,我正在尝试使用 Firefox 3.5 中的新地理定位 API 来估计用户的坐标并将其放入表单中的文本框中。我所拥有的似乎不起作用;似乎在实际检索该位置之前已填充了这些框。这是我到目前为止所拥有的:

<html>
<head>
    <script type="text/javascript">
        var lati =0;
        var longi =0;
        function getPosition(position) 
        {
            lati = position.coords.latitude;
            longi = position.coords.longitude;
        }

        function writeLati(form)
        {
            if (navigator.geolocation) { 
                navigator.geolocation.getCurrentPosition(getPosition);
                lati = position.coords.latitude;
                longi = position.coords.longitude;
                form.latitude.value = lati;
                form.longitude.value = longi;
            } else {
                form.latitude.value = "3";
                form.longitude.value = "5";
                document.write("Your shitty browser can't do geolocation. Get Firefox 3.5.");
            }

        }



    </script>
</head>
<body onLoad="writeLati(locform)">



    <form name="locform" action="submit.php" method="post" >
    Latitude: <input type="text" name="latitude" value=""/>
    Longitude: <input type="text" name="longitude" value="" />
    Gender: <input type="radio" name="gender" value="Male" /> Male <input type="radio" name="gender" value="Female" checked="checked" /> Female
    <input type="submit"  />
    </form> 


</body>

4

4 回答 4

1

getCurrentPosition由于是异步的,表单字段被提前填写。您想在回调函数中填充表单字段(此时position实际上将填充数据),更像这样:

function getPosition(position) 
{
    lati = position.coords.latitude;
    longi = position.coords.longitude;
    form.latitude.value = lati;
    form.longitude.value = longi;
}

当然,您应该添加一些错误处理,因为存在navigator.geolocation并不能保证该位置可用。(另外,你应该让用户清楚,在提交表单之前你不会存储位置——很多人可能会被自动填写一个位置的表单吓跑。)

于 2009-08-24T02:17:49.673 回答
1

虽然这是一个老问题,但我最近遇到了一个类似的问题。Geotext 可以在您可以放置​​类标签的任何地方即时进行地理位置文本替换。例如:

<input name="city" class="geotext[city]" />
<input name="state" class="geotext[state]" />
<input name="zip" class="geotext[zip]" />

或者:

Hello, how is sunny <span class="geotext[city,state,country]"></span>?

https://github.com/Frizzled/geotext

于 2014-08-17T16:13:10.770 回答
0

Native Geolocation 是 FF3.5 的一个很酷的新功能,但目前跨浏览器的解决方案是使用Google API

当我使用它时,这给了我合理的结果,但请注意,准确性会因地区而异,如果您这样做,最好为您的用户提供地图,以便他们可以改进自动生成的位置。

于 2009-07-02T16:31:51.293 回答
0

这不是很实用 - 这是一个跨浏览器的 javascript 解决方案,并且使用来自 yahoo 等的 3rd 方 api 完全执行您想要做的事情。

http://icant.co.uk/geofill/index.php?demo=suggestion

于 2009-07-02T15:49:25.867 回答