Пожалуйста, помогите мне разобраться, как справиться с ситуацией. У нас есть ссылка. Существует правило: hover css для этой ссылки, которое расширяет дополнительный блок ссылок.jQuery preventDefault в соответствии с: зависанием на мобильном телефоне
$('li').children('a').on('click', function(e) {
\t
if ($(this).siblings('div').is(':hidden')) {
\t e.preventDefault();
}
});
ul {
list-style-type: none;
border: 1px solid black;
background-color: white;
}
a {
display: block;
height: 30px;
line-height: 30px;
}
li:hover div {
display: block;
}
li div {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<ul>
<li>
<a href="google.com">Google</a>
<div>
<a href="gmail.com">GMail</a>
<a href="maps.google.com">Maps</a>
</div>
</li>
</ul>
Идея: Нужно preventDefault для первого звена до дополнительных ссылок расширен. На рабочем столе вы не заметите разницу (если вы удаляете правило CSS: hover CSS и пытаетесь нажать на первую ссылку, это не сработает, поскольку остальные ссылки скрыты). Правильное поведение: пользователь набирает первую ссылку, видит других, и после этого он может нажать на первую ссылку.
Проблема начинается с мобильных телефонов с тех пор, как наведите курсор мыши и щелкните на них. Когда пользователь нажимает на первую ссылку, он будет выполнять href, хотя дополнительные ссылки были скрыты в момент нажатия. Но поскольку правило: hover применяется одновременно с нажатием на ссылку, JS рассматривает его так, как будто ссылки уже открыты и не препятствуют умолчанию. Означает, что мой текущий оператор IF ЛОЖЬ на мобильных устройствах за секунду до фактического щелчка. Пожалуйста, помогите мне найти правильный подход.
Решение без использования jquery-mobile приветствуется! Спасибо!
Здравствуйте, спасибо за ваше предложение, но, к сожалению, на мобильных устройствах ваш код будет иметь такую же проблему. Когда пользователь нажимает/нажимает на первую ссылку, будет выполняться href. Вот почему я пытался избежать. На ПК он работает отлично. Но сотовый телефон выполняет «: hover» перед проверкой JS, если он скрыт. Так что для JS это «видимо» сразу после первого касания. – Mike
Интересно. Код работает на моем мобильном телефоне. При нажатии первой ссылки отображаются дополнительные ссылки и остаются на странице. Но если это не работает на вашем тестовом устройстве, есть работа, чтобы поместить 'href' в другой атрибут. Например: используя 'Google' в html, а в js используйте 'window.location.href = $ (this) .data (" href ");' –
То же самое. Проблема не в href, проблема в том, что когда дело доходит до JS, чтобы проверить, скрыт или нет DIV, на мобильных устройствах он становится «видимым» при клике, но до того, как JS поймает событие click, поэтому JS выполняет инструкцию ELSE. Вы можете увидеть его в режиме мобильной эмуляции Google Chrome, например, попробуйте iPhone 6. – Mike