I have three services that I need to be identified, only when the layers are visible. Currently my code references 1 service. I have followed the steps outlined in this thread (I think), however, the app still identifies if a layer is turned off in the TOC. Link to my App.I have also attempted to implement the code sample found here, without any luck.I guess my question/issue is two pronged to try and get maximum understanding of the processes:1. How can I make my code ID layers only when visible?2. How can I add the additional services to my code and ID all three services only when visible?My current code is:dojo.require("esri.dijit.Popup"); //Infowindow
var identifyTask,identifyParams;
function mapReady(map){
dojo.connect(map,"onClick",executeIdentifyTask);
//create identify tasks and setup parameters
identifyTask = new esri.tasks.IdentifyTask("https://www.marioncountyfl.org/arcgis/rest/services/Dynamic/Zoning/MapServer");
identifyParams = new esri.tasks.IdentifyParameters();
identifyParams.tolerance = 3;
identifyParams.returnGeometry = true;
//Choose which layers in the array you would like to be ID'd in the popup
identifyParams.layerIds = [0,1,2,3,4];
identifyParams.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_VISIBLE;
identifyParams.width = map.width;
identifyParams.height = map.height;
}
function executeIdentifyTask(evt) {
identifyParams.geometry = evt.mapPoint;
identifyParams.mapExtent = map.extent;
identifyParams.layerIds = visible
var deferred = identifyTask.execute(identifyParams);
deferred.addCallback(function(response) {
// response is an array of identify result objects
// Let's return an array of features.
return dojo.map(response, function(result) {
var feature = result.feature;
feature.attributes.layerName = result.layerName;
if(result.layerName === 'Zoning Classifications'){
console.log(feature.attributes.NAME);
var template = new esri.dijit.PopupTemplate({
title:"Zoning",
description:"<b>Zoning:</b> {Zoning Classification} <br/> <b>Description:</b> {Zoning Description}"
});
feature.setInfoTemplate(template);
}
else if (result.layerName === 'Assisted Living Facilities'){
var template = new esri.dijit.PopupTemplate({
title:"Assisted Living Facilities",
description:"<b>Parcel ID:</b> {Parcel} <br/> <b>Applicant:</b> {BusinessApplicantName} <br/> <b>No. of Residents</b> {NbrResidents}"
});
feature.setInfoTemplate(template);
}
else if (result.layerName === 'Family Divisions'){
var template = new esri.dijit.PopupTemplate({
title:"Family Divisions",
description:"<b>Parcel ID:</b> {Parcel} <br/> <b>Project Number:</b> {project_nbr} </br> <b>Status:</b> {Status}"
});
feature.setInfoTemplate(template);
}
else if (result.layerName === 'Policy 120'){
var template = new esri.dijit.PopupTemplate({
title:"Policy 120",
description:"<b>Parcel ID:</b> {Parcel} <br/> <b>Business Name:</b> {BusinessName} </br> <b>Date of Letter:</b> {DateOfLetter}"
});
feature.setInfoTemplate(template);
}
else if (result.layerName === 'Zoning Changes'){
var template = new esri.dijit.PopupTemplate({
title:"Zoning Changes",
description:"<b>Parcel ID:</b> {Parcel} <br/> <b>Request Number:</b> {REQUEST_NBR} </br> <b>Property Owner:</b> {PROPERTY_OWNER}"
});
feature.setInfoTemplate(template);
}
return feature;
});
});
// InfoWindow expects an array of features from each deferred
// object that you pass. If the response from the task execution
// above is not an array of features, then you need to add a callback
// like the one above to post-process the response and return an
// array of features.
map.infoWindow.setFeatures([ deferred ]);
map.infoWindow.show(evt.mapPoint);
}