Я пытаюсь сделать виджет, который проще всего описать как доступный список медиаобъектов начальной загрузки. https://getbootstrap.com/docs/4.3/components/media-object/#media-list В исходном коде событие клика js привязано к самому элементу элемента списка.
Моя первая мысль заключалась в том, чтобы обернуть все внутри элемента элемента списка в элемент кнопки и прикрепить мое событие щелчка к кнопке. Это дает фокус элементу списка и действует так, как я бы хотел. Но потом я прочитал, что иметь такие вещи, как теги div или h внутри тега кнопки, - плохая практика.
<ul class="list-unstyled">
<li class="media" onclick="myFunction">
<img src="..." class="mr-3" alt="...">
<div class="media-body">
<h5 class="mt-0 mb-1">List-based media object</h5>
More info
</div>
</li>
</ul>
VS
<ul class="list-unstyled">
<li>
<button type="button" class="media" onclick="myFunction" disabled="isDisabled()">
<img src="..." class="mr-3" alt="...">
<div class="media-body">
<h5 class="mt-0 mb-1">List-based media object</h5>
More info
</div>
</button>
</li>
</ul>
Итак, на данный момент есть другой способ сделать всю строку элемента списка доступной для кликов с помощью семантического html, или мой лучший вариант добавить кнопку role =, события onkeypress для пробела и ввода, настраиваемые активные / отключенные классы и установить tabIndex на li tag?
Изменить: возможно, другой способ думать о дизайне - это использовать этот компонент https://getbootstrap.com/docs/4.3/components/list-group/#links-and-buttons. По сути, дизайн, который я пытаюсь поддерживать, представляет собой стопку интерактивных строк, каждая из которых содержит изображение и пару коротких строк текста.