0

jQuery関数内にある変数にアクセスする方法は、以下のコードです。後の段階でhiddenfieldまたはlabelに保存するには、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

コードを実行すると、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 からコードをコピーして貼り付けたように見えるので、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 に答える
1

関数 show position 内でxローカル変数として使用しての値を返す方が良いと思います。var x

于 2013-06-05T16:32:21.467 に答える