JSON 对象属性在映射事件处理程序中未定义

JSON object properties are undefined in Maps event handler

本文关键字:程序 未定义 事件处理 映射 对象 属性 JSON      更新时间:2023-09-26

我在这里阅读了一些线程,我知道我的globalSettings属性在google.maps.event.addDomListener函数中不可用存在范围问题。

console.log语句返回undefined,但是如果我console.log(globalSettings),它会显示对象及其属性。

如何使属性可用,以便使用它们初始化地图中心并进行缩放?

var globalSettings = jQuery.parseJSON(wpmm_settings);
var ICON = new google.maps.MarkerImage('medicare.png', null, null,
    new google.maps.Point(14, 13));
var SHADOW = new google.maps.MarkerImage('medicare-shadow.png', null, null,
    new google.maps.Point(14, 13));
google.maps.event.addDomListener(window, 'load', function(globalSettings) {
    console.log(globalSettings.map_center_lat);
  var map = new google.maps.Map(document.getElementById('map-canvas'), {
    center: new google.maps.LatLng(globalSettings.map_center_lat, 135),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });...
wpmm_settings是一个

字符串:

"[{'"default_zoom'":'"8'",'"map_center_lat'":'"51.4992913'",'"map_center_lng'":'"-0.1639785'"}]"

globalSettings是解析该字符串的结果:

[Object { default_zoom="8", map_center_lat="51.4992913", map_center_lng="-0.1639785"}]

请注意,由于最外面的方括号,它最终成为单元素数组。

map_center_lat的值作为globalSettings[0].map_center_lat进行访问。

如果从字符串中删除最外层的方括号,则会得到单个"裸"对象,并且可以按预期访问属性。

然后。。。

google.maps.event.addDomListener(window, 'load', function(globalSettings) {...

globalSettings传递给事件处理程序。事件被传递 — 这是标准行为:事件被传递给事件处理程序。此行的作用是将该函数内部globalSettings设置为 window.load 事件。因此,您需要将提及globalSettings替换为类似evt的内容,您可以在函数中忽略它。

代码段中的代码...仍然存在问题,但正确获取对象和事件处理程序将使查找它们更容易。