List with a Select tag
List > Select > Options
This article provides an example of how to work with html select tag within a list. The list is shown as a simple buttons accordion of values, in this case state names. The select tag will contain the cities of each state.
set a variable to the body
let body = document.body;
sample data: used javascript arrays, used same data for simplicity
let usaStates = ['Illinois', 'Indiana', 'Wisconsin', 'Iowa',
'Florida', 'California', 'Washington', 'Oklahoma',
'Texas', 'South Dakota', 'North Dakota', 'New York',
'South Carolina'];
let stateCities = ['Select state', 'chicago', 'Aurora', 'Waukegan',
'Lave Zurich', 'Long Grove'];
declared global variables
var cityNameSelected = '';
var cityIndexSelected = -1;
var stateNameSelected = '';
Created a function to display the city name and the city index within the select tag .
getCityAndIndex = (city, index) => {
cityNameSelected = city;
cityIndexSelected = index;
let texto = `Selected: state: ${stateNameSelected} city: ${cityNameSelected} found at location: ${cityIndexSelected}`;
let para = document.getElementById('valores');
para.textContent = texto;
return {city, index};
}
Created a function to create elements at body level.
addWrapper = (elemName, elemClass, elemId, elemContent) => {
let element = document.createElement(elemName);
element.classList.add(elemClass);
element.id = elemId;
element.textContent = elemContent;
body.appendChild(element);
}
Created a function to create html elements at a given parent level.
addElement = (parentId, elemName, elemClass, elemId, elemContent) => {
let element = document.createElement(elemName);
element.classList.add(elemClass);
element.id = elemId;
element.height = '150px';
element.textContent = elemContent;
let parent = document.getElementById(parentId); // get parent
parent.appendChild(element);
}
Created a function to add the following elements.
createButtonPanelSelectElements = () => {
for (let i = 0; i < usaStates.length; i++ )
{
addElement('outer-wrapper', 'button', 'accordion', 'btn-' + i, usaStates[i]);
addElement('outer-wrapper', 'panel', 'panel', 'panel-' + i, '');
addElement('panel-' + i, 'select', 'select', 'select-' + i, '');
}
}
example of output of each function call in the above function.
addElement('outer-wrapper', 'button', 'accordion', 'btn-' + i, usaStates[i]);
The above code line will produce:
//<body>
/////// <button id='btn'+i class= 'accordion' value= usaStates[i] >
/////// </button>
//</body>
addElement('outer-wrapper', 'panel', 'panel', 'panel-' + i, '');
The above code line will produce:
//<body>
// <button id='btn-'+i class= 'accordion' value= usaStates[i] >
// </button>
//
/////// <panel id='panel-'+i class='panel'>
/////// </panel>
//
// </body>
addElement('panel-' + i, 'select', 'select', 'select-' + i, '');
The above code line will produce:
//<body>
// <button id='btn-'+i class= 'accordion' value= usaStates[i] >
// </button>
//
// <panel id='panel-'+i class='panel'>
/////// <select id='select-'+i class='Select'>
// //// </select>
// </panel>
//
// </body>
Created a function to populate the select tag options
addoptionsToSelect = () => {
for (let i = 0; i < usaStates.length; i++ )
{
for (let j = 0; j < stateCities.length; j++)
{
addElement('select-' + i, 'option', 'option', 'option-' + j, stateCities[j]);
}
}
}
addoptionsToSelect function will produce:
//<body>
// <button id='btn-'+i class= 'accordion' value= usaStates[i] >
// </button>
//
// <panel id='panel-'+i class='panel'>
// <select id='select-'+i class='Select'>
/////// <option class="option" id="option-0">Select City</option>
/////// <option class="option" id="option-1">chicago</option>
/////// .
/////// .
/////// <option class="option" id="option-100">Vernon Hills</option>
// </select>
// </panel>
//
// </body>
Created functions to hook Panel, Select to Button events.
Created functions to hook Panel to mouseover and mouseout events.
Created function to populate city and index from getCityIndex function
Calling sequence
addWrapper('div', 'wrapper', 'outer-wrapper', '');
createButtonPanelSelectElements();
addoptionsToSelect();
hookPanelSelectToButton();
hookPanelToMouseoutAndMouseOver();
cityAndIndexValues();
Please se live code below:
Thank you for reading this article.
Let's Connect
Next article will be: undecided.