javascript - 使用地理位置 API 设置表单输入

标签 javascript forms geolocation set

我是一个 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>

最佳答案

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

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

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

关于javascript - 使用地理位置 API 设置表单输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1075127/

相关文章:

php - cakePHP 在没有 session 、序列化或发布的情况下使用发布数据进行分页以获取

javascript - 如何在 Rails 中的输入标签内存储 erb 值?

google-maps - 当标记在具有 lat 和 lng 值的情况下拖动时获取位置标题

javascript - 使用javascript在html5中获取日期值

javascript - 使用FFmpeg在视频中途改变音量?

jquery - 表单无法在 IE 中正确提交

php - 如何在 PHP 项目中创建 GeoIP 功能?

android - requestLocationUpdates不调用locationCallback

javascript - 将对象数据添加到 html 表单字段

javascript - JSFiddle - 使用 POST 请求错误