I've got a little problem with getting value from an asynchronous function and then use it in the e.target function. I want to be able to click one of two lists (names and surnames) and then show in the div called 'result' the result. I read lots of articles but none of them was straight accurate to my problem :( What am I doing wrong?
async function getData() {
let url = 'http://www.json-generator.com/api/json/get/cuSKqtKmgi?indent=2';
try {
let res = await fetch(url);
return await res.json();
} catch (error) {
console.log(error);
}
}
async function renderUsers() {
const nameList = document.querySelector('.name-list')
const surnameList = document.querySelector('.surname-list')
let data = await getData();
let names = '';
let surnames = '';
data.person.forEach(user => {
let htmlSegment = `
<li>${user.name}</li>
`;
names += htmlSegment;
});
data.person.forEach(user => {
let htmlSegment = `
<li>${user.surrname}</li>
`;
surnames += htmlSegment;
});
nameList.innerHTML = names;
surnameList.innerHTML = surnames;
}
const chooseUser = (e) => {
const result = document.querySelector('.result')
const origin = e.target;
result.textContent = origin.textContent;
}
const showUser = () => {
const menu = document.querySelectorAll('ul li')
menu.forEach(element => {
element.addEventListener('click', chooseUser)
});
}
renderUsers();
showUser()
nav{
display: flex;
justify-content: flex-start;
}
ul li{
cursor: pointer;
}
<nav>
<ul class="name-list">
</ul>
<ul class="surname-list">
</ul>
</nav>
<div class="result"></div>
If something is unclear feel free to ask :)