我有以下代码,当用户点击提交按钮时会显示地图。
目前,函数initialize()不带参数,地图以固定的纬度和经度为中心。我希望能够将纬度和经度作为参数,以便地图以这些为中心。
我已经拥有纬度和经度,所以获得这些参数并不是问题所在;我的问题是我不知道如何将它们传递给函数。
完整代码:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="stylesheet.css">
<title>Simple Map</title>
<meta name="viewport" content="initial-scale=1.0">
<meta charset="utf-8">
</head>
<body>
<div id="map">
<button type="button" onclick="loadScript()">submit</button>
</div>
<script>
function initialize() {
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: 10,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map"),
myOptions);
}
function loadScript() {
var myKey = "myAPIKey";
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = "https://maps.googleapis.com/maps/api/js?key=" + myKey + "&sensor=false&callback=initialize";
document.body.appendChild(script);
}
</script>
</body>
仅限JavaScript:
function initialize() {
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: 10,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map"),
myOptions);
}
function loadScript() {
var myKey = "myAPIKey";
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = "https://maps.googleapis.com/maps/api/js?key=" + myKey + "&sensor=false&callback=initialize";
document.body.appendChild(script);
}
答案 0 :(得分:3)
只需在脚本之前启动变量即可。 在&#34; loadScript&#34;函数更新变量并在&#34;初始化&#34;中使用它们。功能。对我来说,它有效。
<script>
var string = ""; // initialize variables here. You need var lat and var lng
function initialize() {
var latlng = new google.maps.LatLng(-34.397, 150.644);
console.log(string); // just checking, if it does work in "initialize" function
var myOptions = {
zoom: 10,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map"),
myOptions);
}
function loadScript() {
var myKey = "myAPIKey";
var script = document.createElement('script');
script.type = 'text/javascript';
string = "hey it works"; //////////// here take the coordinates
script.src = "https://maps.googleapis.com/maps/api/js?&sensor=false&callback=initialize";
document.body.appendChild(script);
}
</script>
此外,我认为可以稍后使用以下命令更改位置:
map.setCenter(new google.maps.LatLng( 45, 19 ) );
我希望它有所帮助
答案 1 :(得分:1)
您可以使用Array.prototype.bind
将参数预加载到函数中。我们可以使用它来存储参数,即使函数没有用any:
// Modify initialize to accept lat/long
function initialize(lat, long) {
/* etc */
}
// Pre-load our arguments
var gmapsInitialize = initialize.bind(null, -34.397, 150.644);
现在您可以将回调设置为gmapsInitialize
。
另一种选择是创建一个高阶函数,当使用lat / long参数调用时返回你的回调:
function initializeFactory(lat, long) {
return function () {
/* function body of your original initialize here; make use of lat/long arguments */
}
}
您可以通过以下方式创建initialize
的不同版本:
var gmapsInitialize = initializeFactory(-34.397, 150.644);
答案 2 :(得分:1)
我通过创建一个额外的函数解决了将参数传递给回调的方法,
var id = $($element).attr("id");;
var callBackName = id+"_callback";
window[callBackName] = new Function("googleMapCallback(\""+id+"\")");
script.src = "https://maps.googleapis.com/maps/api/js?&sensor=false&callback=window."+callBackName;
这样,您可以拥有包含所有内容的元素,然后可以重新使用它。