我是 javascript 新手,想了解我的代码发生了什么。我正在使用 jQuery 和OpenLayers来做一些网络映射。
这是代码示例 1,其中我的 map 变量是在 onReady 函数中创建的:
$(document).ready(function(){
var map = new.OpenLayers.Map('map', options);
$.get(my_python.cgi_script which returns an html table of available layers)
});
据我了解,我的“地图”变量具有本地范围。
在该函数中,我添加了一些图层、生成控件等。所有这些都在 OpenLayers 文档中工作和介绍。我还使用 jQuery 的 get 方法来调用一个 python.cgi 脚本,该脚本动态生成一个可用层表。这一切都发生在上面的 onReady 中。
我需要处理动态生成的内容,发现我需要将代码放入 onLoad 函数中。如果我将第二个代码块放入 onReady 函数中,则无法通过 jQuery 访问缩略图,因为呈现事物的顺序。
$(document).ready(function(){
var map = new.OpenLayers.Map('map', options);
//More code to dynamically generate a list of available layers, stored in a table
$.get(my_python.cgi_script which returns an html table of available layers)
});
$(body).onLoad(function(){
$(img.thumbnail).bind('click', function(){
var name = $(this).attr('layer_name_id')
var layer = new OpenLayers.WMS(//all the stuff to add the layer, including name)
map.addLayer('layer') //map undefined due to scope
});
});
在上面的块中,'map' 在第二个变量中是未定义的。我理解为什么(范围)并决定 map 需要是一个全局变量。然后我尝试了:
var map; //This is a global because it is defined outside of any functions?
$(document).ready(function(){
map = new.OpenLayers.Map('map', options);
//More code to dynamically generate a list of available layers, stored in a table
$.get(my_python.cgi_script which returns an html table of available layers)
});
$(body).onLoad(function(){
$(img.thumbnail).bind('click', function(){
var name = $(this).attr('layer_name_id')
var layer = new OpenLayers.WMS(//all the stuff to add the layer, including name)
map.addLayer('layer')
});
});
地图变量仍未定义。为什么?我是否误解了全球的运作方式?
通过将 onLoad 函数放在 onReady 代码块中,我能够让一切正常工作。我不知道为什么下面的工作:
$(document).onReady(function(){
var map = new.OpenLayers.Map('map', options);
//More code to dynamically generate a list of available layers, stored in a table
$.get(my_python.cgi_script which returns an html table of available layers)
$(body).onLoad(function(){
$(img.thumbnail).bind('click', function(){
var name = $(this).attr('layer_name_id')
var layer = new OpenLayers.WMS(//all the stuff to add the layer, including name)
map.addLayer('layer')
});
});
});