0

我对地图的每一层都有一个描述,是通过 JSON 对象生成的。我为这些容器生成所有 html,其中包含地图、图例和描述。

html_description += '<div ' + hide + ' id="'+ map_div_id + '_description_' + id + '">' + layer_info.description + '</div>';

 // Set the description from the layer info
 $('#' + map_div_id + '_description').html(html_description);

然后我只想显示某些描述(取决于显示的图层)。所以下面应该可以工作,(因为它在我的控制台调试器中工作)。

 // Hide Descriptions 
 $('#' + map_div_id + '_description div').hide();
 $('#' + map_div_id + '_description_' + visible).show();            

 // Show Proper Description
 console.log('#' + map_div_id + '_description_' + visible);
 console.log($('#' + map_div_id + '_description_' + visible));

奇怪的是我可以操纵标题容器:

// THIS WORKS?!
$('#' + map_div_id + '_description').hide();

有任何想法吗?

http://jsfiddle.net/PazSs/2/

4

3 回答 3

0

that selector:

$('#' + map_div_id + '_description div')

would look for a div inside your description div.

assumed the value of 'map_div_id' is 'test' your markup after insert should look like this:

<div id="test_description">
  <div> ...your description here </div>
</div>

when i see how your build your html_descriptions string, it does not look like it is doing that... (it only would be like that if 'layer_info.description' would contain '...'

thats a lot of assuming, it's probably easier you show us some generated markup, and complete script. use jsfiddle

于 2013-05-07T15:36:19.307 回答
0

我可以看到你的逻辑:

  1. 隐藏所有图层描述
  2. 然后只显示你想看的图层

visible”是什么意思?那是身份证吗?该名称暗示一个布尔值。

如果它是一个布尔值,你的选择器

$('#' + map_div_id + '_description_' + visible).show();

看起来它不会正常工作。

您能否描述visible更多内容,并给出实际标记的示例?

谢谢。

于 2013-05-07T15:50:30.830 回答
0

感谢 jsFiddle。

我对其进行了修改以进行调查,这是我的副本:

http://jsfiddle.net/PazSs/8/

我确实相信您的问题出在您的dynamic_layer数组中。我逐步浏览了 jsFiddle 中的代码,并且该数组的元素为零。

结果是当你打电话

dynamic_layer[map_div_id].setVisibleLayers(layer_id);

它会崩溃,因为您要取消引用未定义的结果(null)。

我看到你正在填充dynamic_layer上面的内容:

if (typeof geo_server != 'undefined' && geo_server != null) {
  gp_server = gis_server + '/' + geo_server;
  gp = new esri.tasks.Geoprocessor(gp_server);
} else {
  // Adds a dynamic layer
  dynamic_layer[map_div_id] = new esri.layers.ArcGISDynamicMapServiceLayer(full_map_server);
  map[map_div_id].addLayers([dynamic_layer[map_div_id]]);
}

这似乎是您将对象填充到dynamic_layer数组中的唯一地方,所以我将从那里开始。检查您的逻辑并确保您始终在需要时放入该层。

让我知道它是否有效!

于 2013-05-07T19:43:13.100 回答