//create an object of users
let Users = [
{
"name": "? Fro Doe",
"id": "user1",
"snack": "Chips"
},
{
"name": "? Mare Ree",
"id": "user2",
"snack": "Bananas"
},
{
"name": "? Sam Wise",
"id": "user3",
"snack": "Candy"
},
]
//identify our list element
let list = document.querySelector('#user-list');
//loop through users in out Users object and add them to the list
for (var i = 0; i < Users.length; i ++) {
let newItem = document.createElement('option');
newItem.innerHTML = Users[i].name;
newItem.id = Users[i].id;
if (i == 0) {
newItem.className = "active";
}
list.appendChild(newItem);
}
list.size = Users.length;
updateResponse(list.firstChild);
//collect all the list items
let listItems = list.querySelectorAll('option');
//loop through the list itmes and add a click listener to each that toggles the 'active' state
for (var i = 0; i < listItems.length; i ++) {
listItems[i].addEventListener('click', function(e) {
if (!e.target.classList.contains('active')) {
for (var i = 0; i < listItems.length; i ++) {
listItems[i].classList.remove('active');
}
e.target.classList.add('active');
updateResponse(e.target);
}
})
}
function updateResponse(element) {
//collect the response element
let response = document.querySelector('#response');
//collect each input from the response element
responseId = response.querySelector('.response-id');
responseName = response.querySelector('.response-name');
responseSnack = response.querySelector('.response-snack');
//find the matching user in the users object and update the inputs to match
for (var i = 0; i < Users.length; i ++) {
if (Users[i].id == element.id) {
responseId.value = Users[i].id;
responseName.value = Users[i].name;
responseSnack.value = Users[i].snack;
}
}
}
function updateUser() {
//collect the response element
let response = document.querySelector('#response');
//collect each input from the response element
responseId = response.querySelector('.response-id');
responseName = response.querySelector('.response-name');
responseSnack = response.querySelector('.response-snack');
//update the js object values
for (var i = 0; i < Users.length; i ++) {
if (Users[i].id == responseId.value) {
Users[i].name = responseName.value;
Users[i].snack = responseSnack.value;
}
}
//update the list
//find current list item
let curItem = list.querySelector('#'+responseId.value);
//update the text on the item
curItem.innerText = responseName.value;
//keep the page from redirecting
return false;
}
body {
font-family: "Segoe UI Variable Text", system-ui, ui-rounded, sans-serif;
}
.parent {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 32px;
}
h1 {
font-family: "Segoe UI Variable Display", system-ui, ui-rounded, sans-serif;
font-weight: 500;
}
@media only screen and (max-width: 500px) {
.parent {
grid-template-columns: auto;
}
}
select {
list-style: none;
margin: 0;
padding: 0;
border: 1px solid #ABABAB;
border-radius: 8px;
overflow: auto;
width: 100%;
}
option {
padding: 8px 4px;
}
form {
display: grid;
grid-template-columns: auto 1fr;
gap: 16px;
}
<div class="parent">
<div class="right">
<h1>Users:</h1>
<select name="user-list" size="3" id="user-list"></select>
</div>
<div class="left">
<h1>User Info:</h1>
<form id="response" onsubmit="return updateUser()">
<label for="id">User ID:</label><input type="text" name="id" class="response-id" disabled></input>
<label for="name">User Name:</label><input type="text" name="name" class="response-name"></input>
<label for="snack">User's Favorite Snack:</label><input type="text" name="snack" class="response-snack"></input>
<input type="submit" value="Save">
</form>
</div>
</div>