How to  get unique values from  an only field and display in a listbox

4140
2
06-17-2015 03:24 AM
DavidDíez
New Contributor

I am trying to  get unique values from  an only field from a  service and after displaying field values in a listbox.

 

Here (http://forums.esri.com/Thread.asp?c=158&f=2396&t=277241#top )there is an example that shows several fields in a first listbox, and after shows the fields values in a second listboxs

 

How could i do the same but with an only FIELD instead of an array of field.  I only need to display the values of an only field in a listbox.

 

Anyone could help??? Any idea about how to subsitute ana array of fields per an single field in this code html??

 

Thank you very much. I am not developer and this is quite difficult for me

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"

  "http://www.w3.org/TR/html4/strict.dtd">

 

<html lang="en">

  <head>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <title>requestfieldvalues</title>

 

  <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.3"></script>

 

  <script type="text/javascript" charset="utf-8">

  dojo.require("esri.utils");

  dojo.require("esri.tasks.query");

 

  var queryTask, query;

 

  function init() {

  queryTask = new esri.tasks.QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/Map...");

 

  query = new esri.tasks.Query();

  query.where = "1=1";

 

  getFieldList();

  }

 

  dojo.addOnLoad(init);

 

  function getFieldList() {

  esri.request({

  url: "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/Map...",

  content: { f:"json" },

  handleAs: "json",

  callbackParamName: "callback",

  load: function(response, io) {

  var fields = response.fields;

  var options = [];

  dojo.forEach(fields, function(field) {

  options.push("<option value=\"" + field.name + "\">" + field.alias + "</option>");

  });

  dojo.byId("fields").innerHTML = options.join("");

  },

  error: function(error) {

  alert(error.message);

  }

  });

  }

 

  function getFieldValues(field) {

  query.outFields = [field];

  queryTask.execute(query, dojo.partial(displayValues, field));

  }

 

  function displayValues(field, featureSet) {

  var options = [], values = [], value;

  dojo.forEach(featureSet.features, function(feature) {

  value = feature.attributes[field];

 

  //add all values

  // options.push("<option value=\"" + value + ">" + value + "</option>");

 

  //filter values to only display unique values

  if (dojo.indexOf(values, value) == -1) {

  values.push(value);

  options.push("<option value=\"" + value + "\">" + value + "</option>");

  }

  });

 

  dojo.byId("values").innerHTML = options.join("");

  }

 

  </script>

  </head>

  <body>

  <select id="fields" onchange="getFieldValues(this.value);"></select>

  <select id="values" onchange="getFieldValues(this.value);"></select>

  </body>

</html>

0 Kudos
2 Replies
YousefQuran
Occasional Contributor

Hi David Díez,

You can eliminate the returned fields from the

query.outFields = ["ID"];

check it from here.

Or simply you can add if statement..

 dojo.forEach(fields, function(field) {
if (field.name === "ID")
  options.push("<option value=\"" + field.name + "\">" + field.alias + "</option>");
  });

Then, simply you can get the unique values from the returned array  from here.

Hope this help you, if you find the answer please mark it as Correct Answer from Actions.

Regards,

Yusuf

0 Kudos
DavidDíez
New Contributor

Thank you very much for your help .

Regards,

David

0 Kudos