Javascript 返回innerHtml的函数的结果未定义,为什么
//需要Func2调用Geo,Geo计算元素内部html中的位置Javascript 返回innerHtml的函数的结果未定义,为什么,javascript,Javascript,//需要Func2调用Geo,Geo计算元素内部html中的位置 function myFunc3() { window.location.href = window.location.href + "/search/" + Func2(); } //应该将位置存储在名为geolem的元素的innerHTML中 function Func2() { Geo(); var x = document.getElementById("GeoElem"); return
function myFunc3() {
window.location.href = window.location.href + "/search/" + Func2();
}
//应该将位置存储在名为geolem的元素的innerHTML中
function Func2() {
Geo();
var x = document.getElementById("GeoElem");
return strip(x.innerHTML); //return the innerHTML
}
//这个函数应该返回纯文本,去掉html
function Geo() {
var x = document.getElementById("GeoElem");
function showPosition(position) {
x.innerHTML = position.coords.latitude + ";" + position.coords.longitude;
}
if (navigator.geolocation) {
x.innerHTML = navigator.geolocation.getCurrentPosition(showPosition);
}
else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
//return x.innerHTML;
}
这两种方法中的任何一种都可以。直接计算并从函数返回它,或者通过html元素获取它并像这样传递它window.location.href=window.location.href+“/search/”+handle\u geolocation\u query()代码>在myFunct3
function handle_geolocation_query() {
navigator.geolocation.getCurrentPosition(function (position) {
var position = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
var lat = position.lat;
var long = position.lng;
return (lat + ';' + long);
})
}
函数navigator.geolocation.getCurrentPosition
不返回任何内容(另请参见),因此默认情况下它返回未定义的内容
希望有帮助。可能是因为您的HTML语法不正确吗?如果您可以提供一个JSFIDLE,那将是最好的。这里是:但它最好是在html中本地复制,我认为fiddler可以避免显示位置,本例尝试这样做(用户收到同意的提示),这要归功于地理定位的概念——这里有一个类似的例子:我需要一个函数中的信息将其连接到url。
需要一个结束标记
谢谢,我在原始问题中已经解决了这个问题。同一问题though@zabeetles一切都正常工作,只需稍加修改就可以在JSFIDLE上工作:我不知道为什么你的JSFIDLE不工作,我已经更新了你的JSFIDLE。主要问题是url中没有定义。这是因为url是在函数返回地理位置之前生成的。您的代码是异步工作的,因此必须在结果出现后构建url。
function Geo() {
var x = document.getElementById("GeoElem");
function showPosition(position) {
x.innerHTML = position.coords.latitude + ";" + position.coords.longitude;
}
if (navigator.geolocation) {
x.innerHTML = navigator.geolocation.getCurrentPosition(showPosition);
}
else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
//return x.innerHTML;
}
function strip(html)
{
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || "";
}
</script>
</body>
</html>
<p id="idx"></p>
<script>
var x = document.getElementById("idx");
function showPosition(position) {
x.innerHTML = position.coords.latitude + ";" + position.coords.longitude;
}
if (navigator.geolocation) {
x.innerHTML = navigator.geolocation.getCurrentPosition(showPosition);
}
else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
</script>
function handle_geolocation_query() {
navigator.geolocation.getCurrentPosition(function (position) {
var position = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
var lat = position.lat;
var long = position.lng;
return (lat + ';' + long);
})
}
function myFunction() {
var x = document.getElementById("id22");
function showPosition(position) { //When the user allows Geolocation, you could get the position, otherwise you can't
x.innerHTML = position !== undefined ? position.coords.latitude + ";" + position.coords.longitude : "You don't have allow Geo";
}
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition); //At this point, the Geolocation is ever undefined
x.innerHTML = 'Please allow Geo!';
}
else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}