我正在尝试检索seprated函数的2个属性,我在函数结束前调试那些值,并且它们有一个值,但是返回值是unwasined我不知道为什么!!
.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>
答案 0 :(得分: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; });
}
答案 1 :(得分:2)
因为你没有从main函数返回它,你从嵌入式匿名函数返回它,它没有对它做任何事情。这样做:
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");
}
答案 2 :(得分:0)
因为函数STAAPlanlat不返回任何值。你的匿名函数返回lan
,但它是异步回调。
在return lan;
之前添加:
document.getElementById("STAAPlanlat").value = "lan is" + lan;