Bootstrap 3 аккордеонный коллапс не работает на iphone
Эти "подменю аккордеона" работают в chrome и firefox, но не на iphone.
Я построил сайт, который включает меню навигации "offcanvas" на меньших экранах. Пользователь нажимает кнопку "горячая собака", и меню навигации скользит по экрану слева... это прекрасно работает до сих пор.
Некоторые элементы навигации содержат подменю. Для них я использовал бутстрап-аккордеонную разметку. Пользователь нажимает стрелку и расширяется "подменю" .
![enter image description here]()
Проблема
Я использую хром на linux. Этот механизм прекрасно работает в хроме, firefox и в каждом браузере, который я могу получить, а также на моем личном телефоне Android. Он также работает на responsinator.com. Однако, поскольку у меня нет Safari и iPhone, я не смог проверить эту функцию непосредственно на iphone. Я работаю над получением эмулятора iPhone...
До тех пор некоторые другие люди смотрели это на iPhone, и мне сказали, что "подменю" вообще не работают. Когда пользователь нажимает на стрелку, ничего не происходит...
Вот выдержка из "пункта меню", содержащего "подменю" : обратите внимание, что я использую атрибуты "data-toggle" и "data-target":
<div class="panel panel-default">
<!-- The "Trigger" -->
<div class="panel-heading">
<h4 class="panel-title">
<a href="view.php?cms_nav_id=1" name="about">
About</a>
<a data-toggle="collapse" data-target="#collapse1">
<i class="pull-right icon-chevron-right mobile-nav-icon"></i>
</a>
</h4>
</div>
<!-- Populated submenus: -->
<div id="collapse1" class="panel-collapse collapse">
<div class="panel-body">
<a href="view.php?cms_nav_id=7" name="ohioimprovementprocess">Ohio Improvement Process</a>
</div>
<div class="panel-body">
<a href="view.php?cms_nav_id=8" name="org/orgbeliefs">Organization Beliefs</a>
</div>
</div>
</div><!-- /.panel -->
Я действительно не знаю, что делать дальше: Подобные вопросы закончились "конфликтом css" или проблемами iphone относительно .click()
, но я не использую это: я использую data-toggle/data-target
. Я рассматриваю отказ от разметки "target-data-target" в ручном вызове события on('click', ... )
, но я бы предпочел не...
Кстати, я называю это в нижней части моей страницы, если это важно:
<script src="/assets/dist/js/bootstrap.min.js"></script>
Что такое "bootstrap.js v3.0.0".
Есть ли у кого-нибудь другие подсказки? Любой недавний прямой опыт с такой проблемой?
Заранее благодарим за помощь.
Ответы
Ответ 1
Итак, я думаю, что я понял это: моя первоначальная разметка основывалась исключительно на элементе данных-цели, но этого, по-видимому, недостаточно. Safari (на iPhone), похоже, также нуждается в атрибуте href (который действительно должен присутствовать на <a>
, так что это работает:
<a data-toggle="collapse" data-target="#collapse1" href="#collapse1">
<i class="pull-right icon-chevron-right mobile-nav-icon"></i>
</a>
Но это не так:
<a data-toggle="collapse" data-target="#collapse1">
<i class="pull-right icon-chevron-right mobile-nav-icon"></i>
</a>
Ответ 2
Для меня коллапс будет работать на рабочем столе и в iphone, но некоторые из моих коллапсов не работают на ipads. Оказалось, что идеальное решение для меня было дано @Loris в ответ @Ryan, чтобы добавить стиль указателя к любому сбрасываемому триггеру (например, div, действующему как кнопка). Я обобщил это на следующий CSS:
[data-toggle~="collapse"] {
cursor: pointer;
}
Ответ 3
глядя на это, у меня была такая же проблема, однако, когда вы добавляете href= "# collapse1", она переместится в верхнюю часть страницы. Я исправил это, обернув элемент кнопкой и удалив css для кнопок. Итак, ваш код будет выглядеть следующим образом:
<button data-toggle="collapse" data-target="#collapse1">
<i class="pull-right icon-chevron-right mobile-nav-icon"></i>
</button>
Надеюсь, это поможет.
Ответ 4
Чтобы сделать эту работу для любого типа элемента, например div
, вы можете использовать следующий метод jQuery (проверенный ios 8):
<div class="collapse-header" data-target="#collapse_0">
Click this element...
</div>
<div id="collapse_0">
...to collapse this element.
</div>
<script>
$('.collapse-header').on('click', function () {
$($(this).data('target')).collapse('toggle');
});
</script>
Ответ 5
Это работает для меня:
$('.divClassName').on('click touchstart', function () {
$($(this).data('target')).collapse('toggle');
});
Ответ 6
Вы можете исправить это, просто добавив этот атрибут в div, который запускает выпадающее меню.
cursor: pointer;