Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在脚本标记内的其他位置调用函数不会';行不通_Javascript - Fatal编程技术网

Javascript 在脚本标记内的其他位置调用函数不会';行不通

Javascript 在脚本标记内的其他位置调用函数不会';行不通,javascript,Javascript,出于某种原因,同一个脚本标记中的代码工作得很好,但调用包含来自其他脚本标记的相同代码的函数却不行 在我的代码中,我在标题中有一个GoogleMap脚本,它工作得非常好,让我们称这个脚本为标记(a) 问题是,当我不在脚本标记A中并且希望从另一个脚本标记调用脚本A中的函数以重用它时。这是行不通的。但是,如果我从该函数复制代码,并将其直接放在同一个标记中,它就会工作 我希望能够称之为“不再写”。我的代码中有什么错误 完整代码: <html> <head runat="server"&

出于某种原因,同一个脚本标记中的代码工作得很好,但调用包含来自其他脚本标记的相同代码的函数却不行

在我的代码中,我在标题中有一个GoogleMap脚本,它工作得非常好,让我们称这个脚本为标记(a)

问题是,当我不在脚本标记A中并且希望从另一个脚本标记调用脚本A中的函数以重用它时。这是行不通的。但是,如果我从该函数复制代码,并将其直接放在同一个标记中,它就会工作

我希望能够称之为“不再写”。我的代码中有什么错误

完整代码:

<html>
<head runat="server">
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

 <script
    src="http://maps.googleapis.com/maps/api/js">
</script>
<script>
//this is the function that I want call
function getAddress(location) {
    var geocoder = new google.maps.Geocoder();
    var latLng = new google.maps.LatLng(location.lat(), location.lng());
    geocoder.geocode({
        latLng: latLng
    },
        function (responses) {
            if (responses && responses.length > 0) {
                $("#addressResult").text(responses[0].formatted_address);
                // alert(responses[0].formatted_address);
            } else {
                alert('Cannot determine address at this location.');
            }
        });
}
var map;
var myCenter = new google.maps.LatLng(51.508742, -0.120850);

function initialize() {
    var mapProp = {
        center: myCenter,
        zoom: 5,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map(document.getElementById("googleMap"), mapProp);

    google.maps.event.addListener(map, 'click', function (event) {
        placeMarker(event.latLng);

    });

}
var marker
function placeMarker(location) {
    if (marker) {
        marker.setPosition(location);
    } else {
        marker = new google.maps.Marker({
            position: location,
            map: map
        });
    }
    //calling it inside and it's working
    getAddress(location);

}

google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>


<body>
<label>Location: </label>
                    <label id="addressResult"></label>
                    <input type="button" value="Current Location" onclick="getLocation()" />
<script>
                            var x = document.getElementById("addressResult");
                        function getLocation() {
                            if (navigator.geolocation) {
                                navigator.geolocation.getCurrentPosition(showPosition);
                            } else {
                                x.innerHTML = "Geolocation is not supported by this browser.";
                            }
                        }

                        function showPosition(position) {
                           //here where I want to call it
                            getAddress(position);
                            }
</script>
  <div id="googleMap" style="width: 500px; height: 380px;"></div>

                        <div>
</body>
</html>

//这就是我想要调用的函数
函数getAddress(位置){
var geocoder=new google.maps.geocoder();
var latLng=new google.maps.latLng(location.lat(),location.lng());
地理编码({
latLng:latLng
},
职能(回应){
if(responses&&responses.length>0){
$(“#addressResult”).text(响应[0]。格式化的#u地址);
//警报(响应[0]。格式化的\u地址);
}否则{
警报('无法确定此位置的地址');
}
});
}
var映射;
var myCenter=newgoogle.maps.LatLng(51.508742,-0.120850);
函数初始化(){
var mapProp={
中心:迈森特,
缩放:5,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById(“googleMap”),mapProp);
google.maps.event.addListener(映射,'click',函数(事件){
地点标记(事件标记);
});
}
var标记
功能位置标记(位置){
如果(标记){
标记器。设置位置(位置);
}否则{
marker=新的google.maps.marker({
位置:位置,,
地图:地图
});
}
//在里面打电话,它就开始工作了
获取地址(位置);
}
google.maps.event.addDomListener(窗口“加载”,初始化);
地点:
var x=document.getElementById(“addressResult”);
函数getLocation(){
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(showPosition);
}否则{
x、 innerHTML=“此浏览器不支持地理位置。”;
}
}
功能显示位置(位置){
//这是我想叫它的地方
地址(职位);
}

正如Ed所提到的,问题可能是因为您将函数调用直接放在了中——这样的代码在页面加载完成之前执行,如果您的代码所依赖的东西还不可用,则可能会中断

要解决这个问题,请将代码放入一个在加载页面后执行的函数中。如果您只关心相对现代的浏览器,请使用事件侦听器,如果您使用的是JS框架,那么它可能提供了一种在支持较旧浏览器的同时实现这一点的方法

(强制jQuery插件:如果使用它,语法是
$(function(){/*此处的代码*/});

更新

您似乎没有正确地将
navigator.geolocation.getCurrentPosition()
的结果转换为
google.maps.LatLng
值。这是一个:

更新#2(来自OP): 按如下方式更改
showPosition
,修复了该问题:

function showPosition(position) {
   var initialLocation = new google.maps.LatLng(
                           position.coords.latitude, 
                           position.coords.longitude);

   getAddress(initialLocation);
}

确保第二个脚本块位于id为
addressResult
的元素之后。更好的是,将所有内容放在头部,并使用适当的onload处理。将来请提供一个完整的测试用例(目前还不清楚这些
块在HTML中的位置)还有您得到的具体错误。@EdCottrell是的,它在id为
addressResult
@Nickolay的元素之后。对不起,当我在解释中提到第一个脚本标记的位置时,我认为这是很清楚的,它位于head标记中。我现在添加了它们。@Nickolay我刚刚学会了如何使用控制台,我得到的错误是:location.lat不是一个函数。现在它终于可以工作了,非常感谢你(在控制台上)帮了我很多。你所发布的内容是正确的,我只需要更改位置,现在它就可以工作了。我尝试将代码放在jquery ready here
$(function(){/*你的代码here*/})仍不工作。
function showPosition(position) {
   var initialLocation = new google.maps.LatLng(
                           position.coords.latitude, 
                           position.coords.longitude);

   getAddress(initialLocation);
}