jQuery – запустить URL-адрес в том же окне, затем обновить
Вопрос
Я использую плагин аккордеона jQuery-UI с навигацией по хэш-тегам, но столкнулся с проблемой.На каждой странице моего сайта есть виджет-аккордеон.URL-адреса на втором уровне моего главного навигационного меню должны открывать правильную панель аккордеона с помощью соответствующего хэш-тега, и они написаны так:
<li class="lvl2"><a href="/thepage.jsp#panel-3">panel 3</a></li>
Проблема в том, что если вы уже смотрите на одну панель любого из аккордеонов, попытка открыть другую панель с помощью навигации второго уровня не работает.Он передает хеш-тег в адресную строку, но не открывает панель аккордеона, пока вы не обновите страницу.Поэтому я решил, что могу решить проблему, добавив немного jQuery, который заставит страницу обновляться через 500 миллисекунд, например:
$('.lvl2 a').click(function() {
setTimeout(function() {
location.reload();
},500);
});
За исключением того, что это саботирует навигацию. прочь со страницы на новую страницу и новая панель аккордеона.Это подсказывает мне, что ответом может быть полный контроль над всеми функциями навигации второго уровня и обработка их с помощью jQuery.
Итак, как я могу изменить это, чтобы «сохранить» URL-адрес из атрибута href тега привязки, передать его в браузер и затем обновите страницу?
Решение 2
Я поигрался с ним еще немного и сумел заставить его работать, как мне кажется, последовательно.По сути, я изменил атрибуты href во всех тегах привязки lvl2 на атрибуты rel, а затем использовал этот атрибут в своей функции jQuery для обработки навигации по новому URL-адресу.Затем я увеличил таймаут с 500 до 1000 миллисекунд.Если что-то меньшее, похоже, страница обновляется слишком рано, прежде чем она получит возможность перейти на новый URL-адрес.
$('.lvl2 a').click(function() {
location.href=$(this).attr('rel');
setTimeout(function() {
location.reload();
},1000);
});
Другие советы
Если lvl2
Сорцины динамичны, вам может потребоваться использовать live
или же liveQuery
вместо click
.