0

我如何访问 jQuery 函数内部的变量,下面是代码。我需要在 var lat, lng 中存储在隐藏字段或后期标签中。我努力了

<script type="text/javascript">

    if (navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(showPosition);
    }
    else{x.innerHTML="Geolocation is not supported by this browser.";}

    var x = null;

    function showPosition(position) {
        var lat = position.coords.latitude;
        var lng = position.coords.longitude;

        x+= lat; 
        alert(lat+ " " +lng);
    } 
 /*
  * I have tried this way for testing  */
   alert(x);
</script>

x 的值未定义。

4

6 回答 6

1

我认为在函数显示位置中x使用它作为局部变量来返回值会更好。var x

于 2013-06-05T16:32:21.467 回答
1

试试这个代码:

http://jsfiddle.net/sqZmU/

(function () {


    var x = "";

    function showPosition(position) {
        var lat = position.coords.latitude;
        var lng = position.coords.longitude;

        x += lat;
    }

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    } else {
        x = "Geolocation is not supported by this browser.";
    }
    /*
     * I have tried this way for testing  */
    $('button').on('click',function(){
        alert(x);
    });

})();
于 2013-06-05T16:20:51.963 回答
1

声明变量lat, lng外部函数,然后您将能够在声明后的代码中访问它们。showPosition在访问它们之前,您必须先调用该函数。

var lat, lng;
function showPosition(position) {
    lat = position.coords.latitude;
    lng = position.coords.longitude;

    x+= lat; 
    alert(lat+ " " +lng);
} 
于 2013-06-05T16:18:21.793 回答
1

当您运行代码时alert(x),会立即触发。这意味着在支持 GeoLocation 的浏览器中x还没有机会设置,这就是您收到undefined消息的原因。

这样做的方法是:

var x = 0;

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition, error);
} else {
    test(); // call other function or display error message 
}

function showPosition(position) {
    var lat = position.coords.latitude;
    var lng = position.coords.longitude;
    x += lat;
    test();
}

function error(){
    console.warn('ERROR(' + err.code + '): ' + err.message);
}

function test() {
    alert(x);
}

看起来您已经从 W3Schools 复制并粘贴了代码,因此如果is not as is not a DOM 元素,因此您将收到undefined错误消息,因此它没有属性。navigator.geolocationtruexinnerHTML

在上面的代码test();中,用于显示一个值为 的弹出框x。在您的代码test();中应该是您要运行的下一个函数。例如,它可以是一个根据用户当前位置(如果可用)获取数据的函数。

更新:这是使用数据填充隐藏字段的示例。

var lat = 0, lng = 0;
function showPosition(position) {
    lat = position.coords.latitude;
    lng = position.coords.longitude;
    test();
}

然后使用:

HTML:

<input type="hidden" id="latInput" />
<input type="hidden" id="lngInput" />

JS:

function test(){
    $("#latInput").val(lat);
    $("#lngInput").val(lng);
}

// or

function test(){
    $.post("your-script.php", { lat: lat, lng: png })
    .done(function(data) {
       // success
    })
    .fail(function() {
        // fail
    });
}
于 2013-06-05T19:12:20.070 回答
0

首先,您必须调用该函数showPosition以查看其效果。

第二件事,不要尝试访问x这样的变量。取而代之的是,您可以从该函数返回所需的值。

于 2013-06-05T16:28:08.650 回答
0

您必须先调用函数showPosition()alert(x)因为 x 仅在调用函数时才会填充。

于 2013-06-05T16:19:43.217 回答