Получилось реализовать переход с последней ссылки при помощи shift+tab, чтобы подменю не закрывалось, таким образом.
$(document).ready(function () { $('.menu-drop__sp > a').focus( function () { $(this).parents('.menu-drop__sp').addClass('focus-menu'); } ); ///////// document.addEventListener('keydown', function (e) { let isTabPressed = (e.key == 'Tab' || e.keyCode == 9); if (e.shiftKey && isTabPressed) { $('.menu-drop__sp ul li:last-child a').blur( function () { $(this).parents('.menu-drop__sp').addClass('focus-menu'); } ); } else { $('.menu-drop__sp ul li:last-child a').blur( function () { $(this).parents('.menu-drop__sp').removeClass('focus-menu'); } ); } }); ////////// $('.menu-drop__sp > a').hover( function () { $('.menu-drop__sp').removeClass('focus-menu'); } ); $(document).click( function (e) { if (!$('.menu-drop__sp ul a').is(e.target)) { $('.menu-drop__sp').removeClass('focus-menu'); }; } ); });
Не могу понять, почему не работает такой вариант. Мне ведь по сути не надо добавлять класс, только удалить, если на последней ссылке в подменю нажимается только tab без shift
$(document).ready(function () { $('.menu-drop__sp > a').focus( function () { $(this).parents('.menu-drop__sp').addClass('focus-menu'); } ); ///////// document.addEventListener('keydown', function (e) { let isTabPressed = (e.key == 'Tab' || e.keyCode == 9); if (!e.shiftKey && isTabPressed) { $('.menu-drop__sp ul li:last-child a').blur( function () { $(this).parents('.menu-drop__sp').removeClass('focus-menu'); } ); } }); ////////// $('.menu-drop__sp > a').hover( function () { $('.menu-drop__sp').removeClass('focus-menu'); } ); $(document).click( function (e) { if (!$('.menu-drop__sp ul a').is(e.target)) { $('.menu-drop__sp').removeClass('focus-menu'); }; } ); });
Данный вариант работает не так, как надо. При изменении размера класс постоянно добавляется и убирается независимо от того, есть скроллинг или нет. Пример в видео.
Может я что-то не так сделал?
window.addEventListener("resize", function () { let mainHeight = document.documentElement.clientHeight; let scrolHeight = Math.max( document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight ); if (scrolHeight > mainHeight) { document.body.classList.toggle('scroll'); } });
Это я так с ходу не скажу. Как-то логику скрипта менять, чтобы при переходе на пункт подменю класс с родительского пункта не убирался. Там на самом деле разные варианты могут быть.
Спасибо за подсказку. Сделал. Класс убирается только при переходе фокуса с последней ссылки в подменю. Добавил последней ссылке класс. Может подскажете, как сделать, чтобы скрипт сам определял последнюю ссылку в подменю? Чтобы не прописывать класс. Еще хотелось бы добавить, чтобы при клике за пределами подменю оно пропадало Сейчас реализовано вот так
$(document).ready(function () { $('.nav-top a').focus( function () { $(this).parents('.nav-top__sp').addClass('focus-menu'); } ); $('.nav-top a.focus-end').focusout( function () { $(this).parents('.nav-top__sp').removeClass('focus-menu'); } ); });
У вас подменю скрытое, если нет того самого класса. Как только уходит фокус с основного пункта, класс убирается и подменю скрывается, поэтому на нём код не срабатывает. Надо сделать так, чтобы подменю не скрывалось.
Как же тогда можно сделать? Изначально ведь подменю должно быть скрыто
Как на самом деле работает mod_rewrite.
Строка с которой работает RewriteRule содержит только index.php, а do=addnews&id=238 попадает в %{QUERY_STRING}.
RewriteRule ^index.php?do=addnews&tpl=obyavleniya&id=([0-9]+)$ index.php?do=addnews&id=$1 [L]
Получилось реализовать переход с последней ссылки при помощи shift+tab, чтобы подменю не закрывалось, таким образом.
$(document).ready(function () {$('.menu-drop__sp > a').focus(
function () {
$(this).parents('.menu-drop__sp').addClass('focus-menu');
}
);
/////////
document.addEventListener('keydown', function (e) {
let isTabPressed = (e.key == 'Tab' || e.keyCode == 9);
if (e.shiftKey && isTabPressed) {
$('.menu-drop__sp ul li:last-child a').blur(
function () {
$(this).parents('.menu-drop__sp').addClass('focus-menu');
}
);
} else {
$('.menu-drop__sp ul li:last-child a').blur(
function () {
$(this).parents('.menu-drop__sp').removeClass('focus-menu');
}
);
}
});
//////////
$('.menu-drop__sp > a').hover(
function () {
$('.menu-drop__sp').removeClass('focus-menu');
}
);
$(document).click(
function (e) {
if (!$('.menu-drop__sp ul a').is(e.target)) {
$('.menu-drop__sp').removeClass('focus-menu');
};
}
);
});
Не могу понять, почему не работает такой вариант. Мне ведь по сути не надо добавлять класс, только удалить, если на последней ссылке в подменю нажимается только tab без shift
$(document).ready(function () {$('.menu-drop__sp > a').focus(
function () {
$(this).parents('.menu-drop__sp').addClass('focus-menu');
}
);
/////////
document.addEventListener('keydown', function (e) {
let isTabPressed = (e.key == 'Tab' || e.keyCode == 9);
if (!e.shiftKey && isTabPressed) {
$('.menu-drop__sp ul li:last-child a').blur(
function () {
$(this).parents('.menu-drop__sp').removeClass('focus-menu');
}
);
}
});
//////////
$('.menu-drop__sp > a').hover(
function () {
$('.menu-drop__sp').removeClass('focus-menu');
}
);
$(document).click(
function (e) {
if (!$('.menu-drop__sp ul a').is(e.target)) {
$('.menu-drop__sp').removeClass('focus-menu');
};
}
);
});
А при чём тут атрибут "rel"?
Ошибся. Конечно же атрибут href. Спасибо всем за подсказку. Действительно, лучше сделать при помощи php, что и попытаюсь реализовать
Всё работает как надо. Спасибо большое. Очень помогли)
Данный вариант работает не так, как надо. При изменении размера класс постоянно добавляется и убирается независимо от того, есть скроллинг или нет. Пример в видео.
Может я что-то не так сделал?
Вот с этим сложнее, могу только сделать, чтобы при любом клике оно пропадало
Чтобы за пределами - простого ничего в голову не приходит.
Спасибо большое за подсказку с :last-child. Забыл про неё.
По-поводу клика вне блока подменю нашёл такой вариант. Вроде всё работает. Собственно весь код
$(document).ready(function () {$('.nav-top a').focus(
function () {
$(this).parents('.nav-top__sp').addClass('focus-menu');
}
);
$('.nav-top__sp ul li:last-child a:last-child').focusout(
function () {
$(this).parents('.nav-top__sp').removeClass('focus-menu');
}
);
$(document).click(
function (e) {
if (!$('.nav-top__sp ul').is(e.target)) {
$('.nav-top__sp').removeClass('focus-menu');
};
});
});
Буду признателен подсказке, если считаете, что что-то не так или лучше сделать по-другому
Это я так с ходу не скажу. Как-то логику скрипта менять, чтобы при переходе на пункт подменю класс с родительского пункта не убирался. Там на самом деле разные варианты могут быть.
Может подскажете, как сделать, чтобы скрипт сам определял последнюю ссылку в подменю? Чтобы не прописывать класс.
Еще хотелось бы добавить, чтобы при клике за пределами подменю оно пропадало
Сейчас реализовано вот так
$(document).ready(function () {$('.nav-top a').focus(
function () {
$(this).parents('.nav-top__sp').addClass('focus-menu');
}
);
$('.nav-top a.focus-end').focusout(
function () {
$(this).parents('.nav-top__sp').removeClass('focus-menu');
}
);
});
Как там Милторг? 🤔
Без понятия😀
Как там Милторг? 🤔
У вас подменю скрытое, если нет того самого класса. Как только уходит фокус с основного пункта, класс убирается и подменю скрывается, поэтому на нём код не срабатывает. Надо сделать так, чтобы подменю не скрывалось.
Как же тогда можно сделать? Изначально ведь подменю должно быть скрыто
Я проверял, всё работает.
https://guspoliteh.ru/index.php?action_skin_change=yes&skin_name=test
После того, как меню раскрывается, фокус переходит на ссылку в подменю, после чего закрывается.
Буду очень признателен, если подскажите, что не так сделал.