Подтвердить что ты не робот

Tab-Navigation - выбор пользователя Remeber

Я использую навигацию TAB для моей подстраницы. Продукты → ?p=products (см. код ниже, сайт реализуется с помощью HTML и PHP)

Проблема:

Пользователь нажимает, например, во второй TAB ссылку Подробности. Затем он использует кнопку "Назад". Теперь он возвращается на сайт Product, но не во вторую вкладку, а в первую.

Я бы хотел запомнить последнюю использованную вкладку (здесь: href="#section-2"), если пользователь вернется к странице продукта.

Есть ли у кого-нибудь идея, как я могу это понять?

<div id="tabs" class="tabs">
    <nav>
        <ul>
            <li><a href="#section-1" class="icon-cross"><span>Product 1</span></a></li>
            <li><a href="#section-2" class="icon-cross"><span>Product 2</span></a></li>
            <li><a href="#section-3" class="icon-cross"><span>Product 3</span></a></li>
            <li><a href="#section-4" class="icon-cross"><span>Product 4</span></a></li>
        </ul>
    </nav>

    <div class="content">

        <section id="section-1">
            <div class="tab-heading">
                <hr>
                <h2 class="intro-text text-center"><strong>Product 1</strong></h2>
                <hr>
            </div>
            ...
        </section>

        <section id="section-2">
            <div class="tab-heading">
                <hr>
                <h2 class="intro-text text-center"><strong>Product 2</strong></h2>
                <hr>
            </div>

            <a href="?p=details">Details</a>

        </section>
    </div>
</div>
4b9b3361

Ответ 1

Вы можете использовать sessionStorage для хранения (пока пользовательский браузер открыт) последней используемой вкладки и извлекать каждый раз, когда загружается страница

$(document).load(function(){
   if (sessionStorage.getItem('lastsessionid') != null){
       //go to anchor, simulates the link click
       $(document).scrollTop( $(sessionStorage.getItem('lastsessionid')).offset().top );
   }
   $('a[href=#section*]').on('click', function(){
       sessionStorage.setItem('lastsessionid', this.href);
   });
});

EDIT: Woooow, он превратился в столь проголосовавший ответ, я его улучшу. Основная идея моего решения - не изобретать колесо о стандарты W3C о

Другой подход, который был бы общим для использования , но я настоятельно рекомендую избегать триггеров, потому что вы имитируете пользователя взаимодействие без необходимости, и иногда приложение имеет другие подпрограммы, связанные с событием щелчка элемента, где можно включить использование щелчка назойливым. Это правда, что способ, которым я выполнял якорь, тоже моделировался, но, в конце концов, это моя культура кодирования, чтобы избежать срабатываний, чтобы поддерживать характер вызовов событий:

$(document).load(function(){
   if (sessionStorage.getItem('lastsessionid') != null){
       //go to anchor, simulates the link click
       $(sessionStorage.getItem('lastsessionid')).trigger('click');
   }
   $('a[href=#section*]').on('click', function(){
       sessionStorage.setItem('lastsessionid', this.href);
   });
});

Для какой-то информации, в старые времена веб-разработчики (я не так стар, но я запрограммировал до того, как javascript превратился в такой замечательный инструмент в рутину web dev) не мог так много полагаться на методы создания сценариев, поэтому то, что они делают для распространения какого-либо поведения, хранит привязку к некоторой переменной post/get и сохраняет это значение до тех пор, пока пользователь не достигнет желаемой процедуры, заставляя путь через ссылку загрузить С# {$ wishAnchor}, чтобы заставить поведение якоря. Очевидно, что это метод, который имеет свои недостатки и слепые пятна, но был очень распространен, когда javascript не был большой ролью в отрасли. Некоторым разработчикам может понадобиться эта идея при работе в таких небольших колодках из универмага, например, где браузеры пэдов слишком стары, чтобы хорошо работать с новыми функциями javascript ES4/ES5/ES6.

Ответ 2

Если бы я понял вас правильно, я бы просто создал сеанс, в котором хранится щелчок. Вы можете выполнить это быстро и легко, используя ajax для регистрации, когда был сделан клик, и удаленно установить сеанс. Этот сеанс будет заменен каждый раз, когда пользователь нажимает на вкладку. Это будет постоянно поддерживать сеанс последней нажатой вкладки. Вот структура необходимых трех элементов:

1. Раздел вкладок, который вы разместили в этом вопросе (HTML)

2. Ajax post отправляет вкладку, выбранную для удаленного файла для хранения сеанса (JS)

3. Удаленный файл, который получит значение табуляции для хранения в сеансе (PHP)


AJAX POST Этот фрагмент будет прослушивать пользователя, чтобы щелкнуть вкладку, а затем отправить значение, выбранное в файл php для сохранения. Вы можете поместить это в отдельный файл или непосредственно в нижний колонтитул своей страницы. Убедитесь, что на вашей странице работает jquery.

$(".icon-cross").on("click",function(){
   var tabValue = $(this).attr('href');
   $.post('file-to-save-session.php', {tabSel: tabValue}, function(data){
       console.log(data);
   });
});

Быстрое объяснение... мы слушаем вкладку с щелчком класса (icon-cross), затем сохраняем значение атрибута href в var tabValue. Затем мы отправляем значение через ajax в файл php для сохранения. Как только он будет сохранен, он будет повторять полученное значение, и функция отобразит его в консоли для просмотра и отладки.


PHP FILE - SAVE TAB SELECTION Этот файл можно хранить в любом месте вашей файловой системы, просто убедитесь, что он правильно указал путь в запросе ajax.

<?php 

session_start(); 

if(isset($_POST['tabSel']) && $_POST['tabSel'] != ''){
   $_SESSION['selected_tab'] = $_POST['tabSel'];
   echo $_SESSION['selected_tab'];
}else{
   echo 'NO TAB SELECTION RECEIVED!';
}

?>

Это довольно понятно. Он прослушивает сообщение на странице с переменной, посланной через сообщение ajax. Если сообщение отправлено и сообщение не пустое, оно сохранит значение для сеанса. Если нет, он ничего не вернет и не коснется самой сессии.


ВАШ HTML-ФАЙЛ С ТАБЛЕМАМИ. Наконец, но не в последнюю очередь вы можете добавить этот фрагмент кода в начало страницы, чтобы просмотреть значение последней выбранной вкладки пользователем. Это будет отображаться на странице с вашими вкладками. Вам может потребоваться преобразовать html файл в php, если он еще не

<?php 
session_start(); 

if(isset($_SESSION['selected_tab'])){ 
    echo $_SESSION['selected_tab']; 
}
?>

Теперь вы сможете увидеть ранее выбранную вкладку на своей странице. Вы можете сохранить его в переменной php или просто поместить сеанс в оператор if, чтобы выделить или отобразить последнюю выбранную вкладку.

Надеюсь, это поможет! Дайте мне знать, если вам нужна дополнительная помощь по этому вопросу:).


ОБНОВЛЕНИЕ: ПЕРЕДАЙТЕ JAVASCRIPT, ДОБАВЛЯЕМЫЙ ПЛЮГОМ: Добавьте это в нижнюю часть страницы (под всеми файлами js)

<?php if(isset($_SESSION['selected_tab'])){ ?>
    <script>
       $(".icon-cross").removeClass('tab-current');
       $("section").removeClass('content-current');
       $('[href="<?php echo $_SESSION['selected_tab']; ?>"]').addClass('tab-current');
       $('section<?php echo $_SESSION['selected_tab']; ?>').addClass('content-current');
    </script>
<?php } ?>

Первые две строки удалят текущий класс из всех выбранных вкладок и их заголовков, второй добавит класс на вкладку, сохраненную в сеансе. Если сеанс отсутствует, этот код не будет работать.

Ответ 3

Проблема в нормальных библиотеках для вкладок не сохраняет хэш ссылки на вкладку. Таким образом, ваш браузер не может отслеживать ход вкладок, и поэтому кнопка "Назад" не работает в случае вкладок, как вы ожидали.

Итак, идея состоит в том, чтобы сохранить ссылку # на вкладке href. Если кто-то сможет сохранить это, то браузер сможет отслеживать прогресс пользователей через вкладки и кнопку "Назад", чтобы поместить пользователя на предыдущую вкладку.

Вы можете сохранить значение # в свойстве hash window.location.

См. ответ ниже

Bootstrap 3: сохранить выбранную вкладку на странице обновления

У этого может быть решение для вас.

После того, как вы сохранили хэш и теперь можете обработать обратную кнопку браузера, обработайте свои переходы, захватив событие onhashchange javaScript.

Здесь вы можете изменить вкладки, когда пользователь обращается в браузере.

Надеюсь, это поможет.

Ответ 4

Дать идентификатор для каждой вкладки. Затем

$(".icon-cross").click(function(){
    var selected_id= $(this).attr('id);
    //save this id to cookie.Then retrieve this cookie value on next page visit
})