我如何访问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的值未定义。
答案 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)
试试这段代码:
(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.geolocation
而true
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
。而不是你可以返回该函数所需的值。