По нажатию на любой из списка элемент, хочу чтоб значение нажатого элемента списка отображалось в блоке, в моем случае отображает underfiend, хочу спросить почему так происходит, укажите на мою ошибку пожалуйста
function func() {
var sound = document.getElementsByTagName('li');
var a = [];
for (i = 0; i < sound.length; i++) {
a[i] += +sound[i].innerHTML;
}
document.getElementById('show_sound').innerHTML = a[i];
}
.list-item {
cursor: pointer;
}
<div class="list">
<ol class="list-item">
<li onclick="func()">элемент списка 1</li>
<li onclick="func()">элемент списка 2</li>
<li onclick="func()">элемент списка 3</li>
<li onclick="func()">элемент списка 4</li>
<li onclick="func()">элемент списка 5</li>
<li onclick="func()">элемент списка 6</li>
<li onclick="func()">элемент списка 7</li>
</ol>
</div>
<div id="show_sound" class="sound">
</div>
Ещё один вариант - делегирование:
document.querySelector('.list-item').addEventListener('click', function(e) {
if (e.target.tagName == 'LI') { document.querySelector('.sound').innerHTML = e.target.innerHTML; }
})
.list-item li:hover { cursor: pointer; color: red; }
<div class="list">
<ol class="list-item">
<li>элемент списка 1</li>
<li>элемент списка 2</li>
<li>элемент списка 3</li>
<li>элемент списка 4</li>
<li>элемент списка 5</li>
<li>элемент списка 6</li>
<li>элемент списка 7</li>
</ol>
</div>
<div id="show_sound" class="sound"></div>
Я бы так реализовал
[...sound = document.getElementsByTagName('li')].forEach(s => {
s.addEventListener('click', () => {
document.getElementById('show_sound').innerHTML += s.innerHTML
})
})
.list-item {
cursor: pointer;
}
<div class="list">
<ol class="list-item">
<li>элемент списка 1</li>
<li>элемент списка 2</li>
<li>элемент списка 3</li>
<li>элемент списка 4</li>
<li>элемент списка 5</li>
<li>элемент списка 6</li>
<li>элемент списка 7</li>
</ol>
</div>
<div id="show_sound" class="sound">
</div>
Вариант два
let a = [];
[...sound = document.getElementsByTagName('li')].forEach(s => {
s.addEventListener('click', () => {
a.push(s.innerHTML);
document.getElementById('show_sound').innerHTML = a
})
})
.list-item {
cursor: pointer;
}
<div class="list">
<ol class="list-item">
<li>элемент списка 1</li>
<li>элемент списка 2</li>
<li>элемент списка 3</li>
<li>элемент списка 4</li>
<li>элемент списка 5</li>
<li>элемент списка 6</li>
<li>элемент списка 7</li>
</ol>
</div>
<div id="show_sound" class="sound">
</div>
var a = [];
function func(i) {
var sound = document.getElementsByTagName('li');
a = sound[i].innerHTML;
document.getElementById('show_sound').innerHTML = a;
}
.list-item {
cursor: pointer;
}
<div class="list">
<ol class="list-item">
<li onclick="func(0)">элемент списка 1</li>
<li onclick="func(1)">элемент списка 2</li>
<li onclick="func(2)">элемент списка 3</li>
<li onclick="func(3)">элемент списка 4</li>
<li onclick="func(4)">элемент списка 5</li>
<li onclick="func(5)">элемент списка 6</li>
<li onclick="func(6)">элемент списка 7</li>
</ol>
</div>
<div id="show_sound" class="sound">
У вас много лишнего кода и куча ошибок +sound[i].innerHTML- плюс в начале переобразовывает к числу зачем вам массив a[]? если нужно выводить одно значение? и в конце у вас выходит i = 7, а массив идет до a[6]
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости