Мне было поручено взять сайт, использующий раскрывающиеся меню CSS, и сделать его адаптивным. Поскольку мобильные телефоны не имеют событий при наведении, я использую Modernizr для добавления классов в меню, чтобы показать / скрыть их. Это отлично работает. Проблема в том, что прикосновение к родительскому элементу все еще приводит к тому, что телефон переходит к родительскому элементу, поэтому, если вы не работаете очень быстро, вы не можете нажимать на подпункты, которые появляются в меню. Возврат false и предотвращение дефолта, оба работают на моем симуляторе iphone, но не работают на реальных устройствах (android и iphone).
//make sure main nav links don't take you anywhere on mobile
$('#a-popular-main-nav').on('touchend', function(event) {
event.preventDefault();
return false;
});
$('#a-profile-main-nav').on('touchend', function(event) {
event.preventDefault();
return false;
});
if (Modernizr.touch) {
$('.menu').each(function () {
var $lis = $(this).find('li');
$lis.on('touchend', function(event) {
var $this = $(this);
if ($this.hasClass('activated')) {
$this.removeClass('activated');
}
else {
$lis.removeClass('activated');
$this.addClass('activated');
}
event.stopPropagation();
});
//close menus if touched outside the menu
$('body').on('touchend', function() {
$lis.removeClass('activated');
});
});
};
Я пробовал каждую комбинацию stopPropagation, protectDefault и return false. Кто-нибудь сталкивался с этим раньше?