Проблема с вашим кодом заключается в том, что в итоге вы получаете несколько слегка отличных JS функций, все они объявлены как function action() {...}
. В JS одной и той же переменной нельзя присвоить более одного значения - поэтому action
относится только к одному из них (я полагаю, к последнему, который будет объявлен), и способ установки этого кода означает что любой клик будет показывать / скрывать только один элемент.
Существует ряд более эффективных способов сделать это, чтобы избежать этой проблемы и работать правильно. Одна из них - иметь только одну функцию, но передавать ей параметр.
Таким образом, у вас будет только одна функция JS (объявленная полностью вне вашего шаблона l oop), которая выглядит следующим образом:
function action(id) {
var added_item_button = document.getElementById(id);
var actualDisplay = getComputedStyle(added_item_button).display;
if (actualDisplay == 'none') {
added_item_button.style.display = 'block';
} else {
added_item_button.style.display = 'none';
}
}
И иметь атрибут onclick
каждого <li>
следующим образом:
<li onclick="action({{ mysong.id }})"><a>CLICK ME</a></li>
Хотя есть альтернативы - включая включение атрибута в <li>
, называемого, скажем, data-id
, который указывает на идентификатор элемента, который необходимо показать и скрыть, - который вы можете затем извлечь из функции action
.
Я также настоятельно рекомендую вам не включать JS в ваши HTML через onclick
атрибуты, но вместо этого добавьте такие обработчики событий в ваш JS, например, с помощью метода addEventListener
.