jQuery如何访问var inside函数

时间:2013-06-05 16:17:00

标签: jquery asp.net

我如何访问jQuery函数内部的变量,下面是代码。我需要在内部var lat,lng存储在hiddenfield或后期的标签中。我试过了

<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的值未定义。

6 个答案:

答案 0 :(得分:1)

声明变量lat, lng的旁边函数,然后您可以在声明后在代码中访问它们。在访问函数之前,您必须先调用函数showPosition

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

    x+= lat; 
    alert(lat+ " " +lng);
} 

答案 1 :(得分: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);
    });

})();

答案 2 :(得分:1)

我认为最好在函数show position中使用x将其作为局部变量值返回var x的值。

答案 3 :(得分: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的代码,因此如果undefined不是navigator.geolocationtrue isn',则会出现x错误一个DOM元素,因此它没有innerHTML属性。

在上面的代码中,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
    });
}

答案 4 :(得分:0)

您必须在showPosition()之前调用函数alert(x),因为x仅在调用函数时填充。

答案 5 :(得分:0)

首先,您必须调用函数showPosition才能看到它的效果。

其次,不要尝试像这样访问变量x。而不是你可以返回该函数所需的值。