1

分離された関数の2つの属性を取得しようとしていますが、関数の終了前に値をデバッグしていますが、値はありますが、戻り値は常に定義されていません。理由はわかりません!!

.js ファイル

function STAAPlanlat(){
  alert ("the function");

  if (navigator.geolocation) {
    //we supposed to call the handlers of the expections 
    navigator.geolocation.watchPosition(function(position) {
      alert("show position ");
     //  x.innerHTML="Latitude: " + position.coords.latitude +"<br />Longitude: " + position.coords.longitude;  
      var lat=position.coords.latitude;
      var lan=position.coords.longitude;    

      //x.innnerHTML=out
      alert(lat+"<"+lan);
      return lan;
    });

  } else {
    alert("error");
  }
}

lan と lat の値を含むアラートを受け取りました

しかし、分離されたファイルを呼び出すと、未定義の戻り値が返されます

 <!DOCTYPE html>
 <html>
 <head>
     <script type="text/javascript" src="STAAP1.2.js"> </script>

 <script type="text/javascript">
     function test(){
     var out=STAAPlanlat();     
     document.getElementById("STAAPlanlat").value = "lan is"+out;
     //document.writeln("lan is"+out);
     }
     </script>  
 </head>
 <body>
 <p id="STAAPlanlat">Test the division</p>
 <button onclick="test()">STAAPlanlat()</button>
 <button onClick="alertme()" >Alert</button>

 </body>
 </html>
4

3 に答える 3

3

メイン関数から返していないため、何もしていない埋め込みの匿名関数から返しています。これを行う:

function STAAPlanlat(){
var lat;
var lan;
alert ("the function");
if (navigator.geolocation) {
    //we supposed to call the handlers of the expections 
    navigator.geolocation.watchPosition(function(position) {
        alert("show position ");
        //  x.innerHTML="Latitude: " + position.coords.latitude +"<br />Longitude: " + position.coords.longitude;   
        lat=position.coords.latitude;
        lan=position.coords.longitude;  

        //x.innnerHTML=out
        alert(lat+"<"+lan);
    });
    return lan;
}
else
    alert("error");
}
于 2012-07-11T21:33:27.140 に答える
3

匿名関数で返され、この値は何にも割り当てられません。コールバックを使用して、必要なことを行うことができます。

// untested code, hope it works
function STAAPlanlat(callback){
    alert ("the function");
    if (navigator.geolocation) {
        navigator.geolocation.watchPosition(function(position) {
            var lat=position.coords.latitude;
            var lan=position.coords.longitude;  
            callback(lat, lan);
        });
    }
    else{
        alert("error");
    }
}

そして、あなたのテスト機能...

function test(){
    var out;
    STAAPlanlat(function(lat, lon) { out = lat; });
}
于 2012-07-11T21:36:41.477 に答える
0

関数 STAAPlanlat は値を返さないためです。あなたの匿名関数は戻りますlanが、それは非同期コールバックです。これを前に追加しますreturn lan;

document.getElementById("STAAPlanlat").value = "lan is" + lan;
于 2012-07-11T21:33:51.600 に答える