#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
, если есть какие-либо другие элементы