Что я могу сделать, чтобы оставаться на той же вкладке после обновления страницы? - PullRequest
0 голосов
/ 22 декабря 2018

Я занимаюсь разработкой небольшого веб-приложения для управления школой.

Я сделал несколько tabs (используя bootstrap 3 ), большинство из них tabs имеют sub tabs (т.е.одна вкладка имеет одну или несколько вкладок под ней).

Эти вложенные вкладки имеют forms, который принимает данные от пользователя.

Проблема: когдаПри нажатии кнопки пользователь попадает на главную домашнюю вкладку.

Я хочу, чтобы пользователь оставался на текущей вкладке (где он находится в данный момент).

Как мне это сделать?

это код (улучшенный)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Keep Last Selected Bootstrap Tab Active on Page Refresh</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css">
<script src="bootstrap/js/bootstrap.min.js"></script>

<script type="text/javascript">
$(document).ready(function(){
    $('a[data-toggle="tab"]').on('show.bs.tab', function(e) {
        localStorage.setItem('activeTab', $(e.target).attr('href'));
    });
    var activeTab = localStorage.getItem('activeTab');
    if(activeTab){
        $('#myTab a[href="' + activeTab + '"]').tab('show');
    }
});

</script>
<style type="text/css">
    .bb-example{
        margin: 20px;
    }
</style>
</head>
<body>
<div class="bb-example">
    <ul class="nav nav-tabs" id="myTab">
        <li class="active"><a data-toggle="tab" href="#sectionA">Section A</a></li>
        <li><a data-toggle="tab" href="#sectionB">Section B</a></li>
        <li><a data-toggle="tab" href="#sectionC">Section C</a></li>
    </ul>
    <div class="tab-content">
        <div id="sectionA" class="tab-pane fade in active">
            <h3>Section A</h3>
            <p>Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui. Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth.</p>
        </div>
        <div id="sectionB" class="tab-pane fade">
            <h3>Section B</h3>
            <p>Vestibulum nec erat eu nulla rhoncus fringilla ut non neque. Vivamus nibh urna, ornare id gravida ut, mollis a magna. Aliquam porttitor condimentum nisi, eu viverra ipsum porta ut. Nam hendrerit bibendum turpis, sed molestie mi fermentum id. Aenean volutpat velit sem. Sed consequat ante in rutrum convallis. Nunc facilisis leo at faucibus adipiscing.</p>
        </div>
        <div id="sectionC" class="tab-pane fade">
            <br>
                    <div class="row" style="height: 475px;">
                        <ul class="nav nav-tabs nav-justified" id="myTab">
                            <li id="li" class="active">
                                <a href="#Tab1" data-toggle="tab" style="color: blue;"> <span class="glyphicon glyphicon-plus"></span> &nbsp;&nbsp;Tab 1</a>
                            </li>

                            <li id="li" >
                                <a href="#Tab2" data-toggle="tab" style="color: blue;"><span class="glyphicon glyphicon-eye-open"></span> Tab 2</a>
                            </li>

                        </ul>


                     <div class="col-md-11" >
                        <div class="container" >
                            <div class="tab-content">
                                <div id="Tab1" class="tab-pane active">
                                        <div class="row">
                                            <p> Hello there! Tab 1</p>
                                            <br>
                                        </div>
                                </div>

                                <div id="Tab2" class="tab-pane">
                                        <div class="row">
                                            <p> Hello there too! Tab 2</p>
                                                 <div class="container"> 
                                            <div class="row">
                                                        <div class="col-md-8">
                                                            <br />
                                                        <form action="tab2.php" method="POST">
                                                            <div class="form-group">
                                                                <label for="InputUserName"> Enter User Name</label>
                                                                <input class="form-control" placeholder="Enter User Name" type="text" name="" id="userName">
                                                            </div>
                                                            <div class="form-group">
                                                                <label for="userName"> Enter Password</label>
                                                                <input class="form-control" placeholder="Enter Password" type="Password" name="" id="userName">
                                                            </div>
                                                            <input type="submit" id="submit" class="btn btn-primary">
                                                        </form>


                                                    </div>
                                            </div>
                                            </div>
                                            <br>
                                        </div>
                                </div>
                            </div>
                        </div>
                    </div>

                    </div>

        </div>

    </div>
</div>
</body>
</html> 

1 Ответ

0 голосов
/ 25 декабря 2018

Я вижу, что никто не помогает вам, поэтому я дам вам решение.

Довольно много времени я не занимаюсь веб-разработкой, но у меня есть кое-что, что может поставить вас вправильное направление.

Проверьте это.

Существует также живой пример здесь .

Это не очень хорошо продуманный код, но это то, чтоработает и может помочь вам.

Вот мой рабочий код:

<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Keep Last Selected Bootstrap Tab Active on Page Refresh</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

    <script type="text/javascript">
        $(document).ready(function(){
            console.log('here I am')
            // this add an handler when a tab is selected on myMaiTab 
            $('#myMainTab a[data-toggle="tab"]').on('show.bs.tab', function(e) {
                localStorage.setItem('activeTab', $(e.target).attr('href'));
            });
            // this add an handler when a tab is selected on mySubTab 
            $('#mySubTab a[data-toggle="tab"]').on('show.bs.tab', function(e) {
                localStorage.setItem('activeSubTab', $(e.target).attr('href'));
            });

            // Select the previous mainTab
            var activeTab = localStorage.getItem('activeTab');
            if(activeTab){
                $('#myMainTab a[href="' + activeTab + '"]').tab('show');
            }

            var activeSubTab = localStorage.getItem('activeSubTab');
            if(activeSubTab){
                $('#mySubTab a[href="' + activeSubTab + '"]').tab('show');
            }
        });
    </script>
    <style type="text/css">
        .bb-example{
            margin: 20px;
        }
    </style>
</head>

<body>
    <div class="bb-example">
        <ul class="nav nav-tabs" id="myMainTab">
            <li class="active"><a data-toggle="tab" href="#sectionA">Section A</a></li>
            <li><a data-toggle="tab" href="#sectionB">Section B</a></li>
            <li><a data-toggle="tab" href="#sectionC">Section C</a></li>
        </ul>
        <div class="tab-content">
            <div id="sectionA" class="tab-pane fade in active">
                <h3>Section A</h3>
                <p>Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui. Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth.</p>
            </div>
            <div id="sectionB" class="tab-pane fade">
                <h3>Section B</h3>
                <p>Vestibulum nec erat eu nulla rhoncus fringilla ut non neque. Vivamus nibh urna, ornare id gravida ut, mollis a magna. Aliquam porttitor condimentum nisi, eu viverra ipsum porta ut. Nam hendrerit bibendum turpis, sed molestie mi fermentum id. Aenean volutpat velit sem. Sed consequat ante in rutrum convallis. Nunc facilisis leo at faucibus adipiscing.</p>
            </div>
            <div id="sectionC" class="tab-pane fade">
                <br>
                <div class="row" style="height: 475px;">
                    <ul class="nav nav-tabs nav-justified" id="mySubTab">
                        <li id="li" class="active">
                            <a href="#Tab1" data-toggle="tab" style="color: blue;"> <span class="glyphicon glyphicon-plus"></span> &nbsp;&nbsp;Tab 1</a>
                        </li>

                        <li id="li">
                            <a href="#Tab2" data-toggle="tab" style="color: blue;"><span class="glyphicon glyphicon-eye-open"></span> Tab 2</a>
                        </li>

                    </ul>

                    <div class="col-md-11">
                        <div class="container">
                            <div class="tab-content">
                                <div id="Tab1" class="tab-pane active">
                                    <div class="row">
                                        <p> Hello there! Tab 1</p>
                                        <br>
                                    </div>
                                </div>

                                <div id="Tab2" class="tab-pane">
                                    <div class="row">
                                        <p> Hello there too! Tab 2</p>
                                        <div class="container">
                                            <div class="row">
                                                <div class="col-md-8">
                                                    <br />
                                                    <form method="POST">
                                                        <div class="form-group">
                                                            <label for="InputUserName"> Enter User Name</label>
                                                            <input class="form-control" placeholder="Enter User Name" type="text" name="user" id="userName">
                                                        </div>
                                                        <div class="form-group">
                                                            <label for="userName"> Enter Password</label>
                                                            <input class="form-control" placeholder="Enter Password" type="Password" name="password" id="Password">
                                                        </div>
                                                        <input type="submit" id="submit" class="btn btn-primary">
                                                    </form>
                                                </div>
                                            </div>
                                        </div>
                                        <br>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>

                </div>

            </div>

        </div>
    </div>
</body>

</html>

В вашем коде были некоторые ошибки, которые я вам здесь ниже объясню, просто чтобы вы знали о них.

Прежде всего, вы добавили один глобальный обработчик на selected tab в nav-tab ко всем вкладкам навигации, присутствующим в вас DOM (ваш HTML-файл).

$('a[data-toggle="tab"]').on('show.bs.tab', function(e) {
    localStorage.setItem('activeTab', $(e.target).attr('href'));
});

Таким образом, когда вы находитесь в Section C и выбираете Tab 2, этот обработчик инициирует сохранение элемента activeTab в локальном хранилище браузера, перекрывающего значение внешней вкладки.

Более того, вы добавили один и тот же идентификатор к двум nav-tab в вашей DOM, делая для вас невозможнымo программно различать их.

enter image description here

Итак, я сделал, чтобы добавить другой идентификатор к nav-tabs

  • myMainTab
  • mySubTab

И я установил для них разные обработчики:

        // this add an handler when a tab is selected on myMaiTab 
        $('#myMainTab a[data-toggle="tab"]').on('show.bs.tab', function(e) {
            localStorage.setItem('activeTab', $(e.target).attr('href'));
        });
        // this add an handler when a tab is selected on mySubTab 
        $('#mySubTab a[data-toggle="tab"]').on('show.bs.tab', function(e) {
            localStorage.setItem('activeSubTab', $(e.target).attr('href'));
        });

, чтобы обработчики не перекрывали друг друга.

И последнее. .

Если вы хотите перехватить входное значение POST на стороне сервера, вам нужно добавить значение также в свойство name:

<input class="form-control" placeholder="Enter User Name" type="text" name="user" id="userName">

<input class="form-control" placeholder="Enter Password" type="Password" name="password" id="Password">

Вот и все.Надеюсь, что понял ваши потребности.

Предложения:

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

...