Javascript 返回innerHtml的函数的结果未定义,为什么

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

//需要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 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.";
  }

}