function updateView(campusId) {
var latlng = CampusModel[campusId].latlng;
var canvas = "campus-map";
var zoom = 12;
google.maps.event.addDomListener(window, 'load', mapInitialize(latlng, canvas, zoom));
...
}
我最初发布了一张图片,显示当函数exe时,campusId参数为1。
在功能块内,[campusId]未定义。
有人在这里看到问题吗?
定义了CampusModel。
完整代码行:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>MVC Example</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css" />
<script src="http://code.jquery.com/jquery-2.1.3.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script>
/* MODEL */
var CampusModel = {
1: {
name: 'a Campus',
address: 'somewhere',
lating: { lat: 41.1693913, lng: -127.8672693 }
},
2: {
name: 'b Campus',
address: 'somewhere2',
lating: { lat: 19.2833298, lng: -124.1152499 }
},
};
/* CONTROLLER */
function initView() {
var selector = document.getElementById('campuses-dropdown');
var options = '<option>[ Select a Campus ]</option>';
for (var campusId in CampusModel) {
options += '<option value="' + campusId + '">';
options += CampusModel[campusId].name;
options += '</option>';
}
selector.innerHTML = options;
selector.onchange = function() { updateView(this.value); };
}
</script>
<script>
//Helper functions
// Initialize google map.
function mapInitialize(latlng, canvas, zoom){
var mapCanvas = document.getElementById(canvas);
var options = {
center: latlng,
zoom: zoom,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var campusMap = new google.maps.Map(mapCanvas, options);
var marker = new google.maps.Marker({
position: latlng,
map: campusMap,
title: 'BCIT'
});
}
function updateView(campusId) {
var latlng = CampusModel[campusId].latlng;
var canvas = "campus-map";
var zoom = 12;
google.maps.event.addDomListener(window, 'load', mapInitialize(latlng, canvas, zoom));
google.maps.event.addDomListener(window, "resize", function() {
var center = campusMap.getCenter();
google.maps.event.trigger(campusMap, "resize");
campusMap.setCenter(center);
});
}
</script>
</head>
<body onload="initView()">
<!-- VIEW -->
<div>
<select id="campuses-dropdown"></select>
</div>
<div id="campus-map">
</div>
</body>
</html>
selector.onchange = function(){updateView(this.value); };
原始代码中“this”指的是哪里?我以为是指向选择器。但也许不是吗?
仍然this.value将正确的参数传递给函数。
基本原因是什么
答案 0 :(得分:0)
因为您已使用campusId
作为参数定义了函数,所以函数内部的值将为undefined
,除非您在调用函数时实际传递某个值
编辑 - 现在您已经发布了所有代码,问题显而易见。您将“updateView”函数绑定为事件处理程序,并期望(错误地)this
在调用时引用“selector”对象。您需要的是与.bind()
:
selector.onchange = function() { updateView(this.value); }.bind(selector);