как сделать значок font-awesome в кнопке интерактивным?

#html #jquery #css #bootstrap-4 #font-awesome

#HTML #jquery ( jquery ) #css #bootstrap-4 #шрифт-awesome

Вопрос:

У меня есть значок в кнопке. Когда я нажимаю кнопку (буквально остальную часть кнопки, кроме значка), под кнопкой отображается выпадающий список. Однако, когда я нажимаю значок стрелки вниз на кнопке, выпадающий список не отображается. Мне нужно убедиться, что и кнопка, и значок доступны для просмотра. Как мне это сделать?

Вот фрагмент кода:

 function myFunction() {
    document.getElementById("myDropdown").classList.toggle("show");
}
    
// Close the dropdown if the user clicks outside of it
window.onclick = function(event) {
    if (!event.target.matches('.dropbtn')) {
        var dropdowns = document.getElementsByClassName("dropdown-content");
        var i;
        for (i = 0; i < dropdowns.length; i  ) {
            var openDropdown = dropdowns[i];
            if (openDropdown.classList.contains('show')) {
                openDropdown.classList.remove('show');
            }
        }
    }
} 
 #myDropdown {
  display: none;
}
#myDropdown.show {
  display: block;
} 
 <div class="dropdown">
    <button onclick="myFunction()" class="btn dropbtn btn-primary">
        More <i style='font-size:16px' title='More' class='fas'>amp;#xf0d7;</i>
    </button>

    <div id="myDropdown" class="dropdown-content" style="line-height:15px;">                
        <a href="#" target="_blank">Duplicate New</a>
        <a href="#" target="_blank">Download PDF</a>
        <a href="#" target="_blank">Print PDF</a>        
        <a href="#" class="delete" data-id="{{ $dataTypeContent->getKey() }}" id="delete-{{ $dataTypeContent->getKey() }}">Delete</a>        
    </div>
</div> 

Комментарии:

1. Он отлично работает на мобильных устройствах.

Ответ №1:

window.onclick Функция также должна запускаться, когда вы нажимаете либо на <button> или <i> , но поскольку event.target это не dropbtn так, когда вы нажимаете на <i> , скорее всего, она проходит if (!event.target.matches('.dropbtn')) проверку и закрывает выпадающий список, как если бы вы щелкнули в другом месте экрана.

Я бы попытался if (!event.target.matches('.dropbtn') amp;amp; !event.target.matches('.fas')) посмотреть, исправит ли это. Если это так, я бы добавил более конкретный класс <i> , например, dropdown-toggle и проверил, соответствует ли он этому, иначе он не закроет выпадающий список, если вы нажмете любой другой значок font-awesome на экране.

Обновление — похоже, это удалось, вот JSFiddle https://jsfiddle.net/p1kw746q /

Комментарии:

1. Или вы можете ввести его так !event.target.matches('.dropbtn, .dropbtn *') , чтобы упростить, чтобы он проверял dropbtn , вызывает ли это событие, или все внутри dropbtn , если есть какие-либо другие элементы