Как я могу сохранить состояние slideToggle при обратной записи? - PullRequest
2 голосов
/ 02 апреля 2011

Я хочу, чтобы jQuery slideToggle() сохранил свое состояние. По умолчанию при загрузке страницы она сворачивается. Для <div>, к которому применен slideToggle (), есть кнопка asp:, и при щелчке выполняется некоторая операция, но, вероятно, происходит пост-пост.

Если страница обновлена, начальное состояние <div> должно быть видно, если пользователь ранее щелкнул slideToggle(). Точно так же, если пользователь снова сворачивает <div>, когда страница обновляется (F5 или сообщение назад), тогда <div> должен быть снова свернут.

Итак, в основном я хочу знать, как сохранить состояние slideToggle () при отправке сообщения назад? Вот код:

<script type="text/javascript">
    $(document).ready(function() {
        $(".flip").click(function() {
            $(".panel").slideToggle("slow");
        });
    });
</script>

<div>
    <div class="panel">
        <table>
            <tr>
                <td>First Name:</td>
                <td><asp:TextBox runat="server" Text=""></asp:TextBox></td>
            </tr>
            <tr>
                <td>Last Name:</td>
                <td><asp:TextBox ID="LastName" runat="server" Text=""></asp:TextBox></td>
            </tr>
            <tr>
                <td>Email:</td>
                <td><asp:TextBox ID="Email" runat="server" Text=""></asp:TextBox></td>
            </tr>
            <tr>
                <td>Role Name:</td>
                <td>
                    <asp:DropDownList ID="RoleName" runat="server">
                        <asp:ListItem Text="Select a role" Enabled="true" Value=""> </asp:ListItem>
                        <asp:ListItem Text="DC" Value="DC"> </asp:ListItem>
                        <asp:ListItem Text="ST" Value="ST"> </asp:ListItem>
                        <asp:ListItem Text="AD" Value="AD"> </asp:ListItem>
                        <asp:ListItem Text="CA" Value="CA"> </asp:ListItem>
                        <asp:ListItem Text="GSP" Value="GSP"> </asp:ListItem>
                        <asp:ListItem Text="GDC" Value="GDC"> </asp:ListItem>
                        <asp:ListItem Text="GST" Value="GST"> </asp:ListItem>
                        <asp:ListItem Text="GAD" Value="GAD"> </asp:ListItem>
                        <asp:ListItem Text="GCA" Value="GCA"> </asp:ListItem>
                        <asp:ListItem Text="GSP" Value="GSP"> </asp:ListItem>
                    </asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td><asp:Button ID="Addparticipant" runat="server" Text="Add Participant" /></td>
            </tr>
        </table>
    </div>
    <p class="flip">Show/Hide Panel</p>
</div>

Код ASP:

Protected Sub Addparticipant_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Addparticipant.Click
    Response.Write("Hi it work yaar")
End Sub

Ответы [ 8 ]

5 голосов
/ 06 апреля 2011

в качестве альтернативы куки вы можете посмотреть на скрытые поля asp.net .Вы можете записать значения в него и прочитать их обратно, используя JavaScript.

Здесь - пример того, как вы можете читать \ записывать значения в скрытые поля, используя JS.Параметр cookie может не работать, если пользователь отключил его, и в этом случае вы можете использовать скрытые поля в качестве запасного варианта.

5 голосов
/ 06 апреля 2011

Вы можете сделать это с куки, как указано airbai. Если вы используете jquery, это так же просто, как установка

$.cookie("ToggleStatus", toggleStatus);

toggleStatus - показывает, является ли ваш переключаемый элемент видимым в данный момент или нет. Вы получите его с помощью:

var toggleStatus = $.cookie("ToggleStatus");

Кроме того, вы можете создать элемент управления поля формы и сохранить там значение.

4 голосов
/ 08 апреля 2011

Я создал для вас пример в jsfiddle о том, как использовать cookie для сохранения и восстановления состояния вашего переключателя http://jsfiddle.net/6KkCE/

Код JavaScript:

var panel = $(".panel"), flip = $(".flip"),
    state = $.cookie("ToggleStatus");

flip.click(function() {
    panel.slideToggle("slow", function() {
        $.cookie("ToggleStatus", (state == 1? "0" : "1"));
    });
});

if ((state == 0 && panel.is(':visible'))) {
    panel.slideUp();
}
3 голосов
/ 09 апреля 2011

Существуют разные способы сохранения состояния объекта, управляемого Javascript.Во-первых, хранить его в печенье.Очень просто поддерживается большинством браузеров:

$(function() {

    var cookie = document.cookie,
        state  = cookie.substr(cookie.search('buttonCollapsed=')+16,1),
        elem   = $('div.collapsable');

    if (state == 1) {
        elem.hide();
    }

    elem.slideToogle(function() {

        if ( elem.is(':visible') ) {
            document.cookie = "buttonCollapsed=0";
        } else {
            document.cookie = "buttonCollapsed=1";
        }

    });

});

Вот хорошая Документация для файлов cookie в Javascipt .

В современных браузерах вы можете использовать локальное хранилище.Это часть спецификации Javascripts Webstorage и должна быть уже реализована в последних версиях браузера.Например, Firefox поддерживает его начиная с версии 3.5.В этом хранилище вы можете разместить сложные объекты со всеми необходимыми настройками.Вам нужно только сериализовать их в строку JSON.Это действительно просто:

var settings = {
    buttonCollapsed: true,
    lastPage: 5,

    // ...

    someNumbers: [1,4,6,9]
};

// Write object into storage
window.localStorage['mySettings'] = JSON.stringify(settings);

// Read object fron storage
settings = JSON.parse(window.localStorage['mySettings']);

if(settings.buttonCollapsed) {
    $('div').hide();
}

Если вам не нужно поддерживать старый браузер с полной функциональностью, я бы использовал локальное хранилище.Если позже вы захотите хранить более сложные данные, вы можете использовать их повторно.Это может быть удобнее, если вы создадите некоторые функции доступа, такие как save($key, $value) и load($key).Я начал плагин jQuery, который использует локальное хранилище , но в настоящее время он не готов к использованию.Может быть, вы черпаете вдохновение.

Если вы хотите поддержать сохранение состояния для новых браузеров и f *** o ** старых, вам следует проверить, доступно ли локальное хранилище:

if (typeof window.localStorage !== 'undefined') {
    // ... 
}

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

1 голос
/ 25 апреля 2012

Попробуйте использовать localStorage объект браузера.Вот перекрестные библиотеки jStorage и WEBSHIMS json-storage

1 голос
/ 08 апреля 2011

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

Я думаю, что вы должны спросить себя: какая выгода от того, чтобы сохранить это на вашем сайте? Это чисто косметическое; хорошо иметь функцию, если у пользователя включен JavaScript? Каково влияние, если JavaScript отключен?

Тем не менее, если вы хотите использовать jQuery для чтения / записи ваших файлов cookie, вам понадобится один из (многих) плагинов cookie для jQuery. Я думаю, что наиболее известным является этот . Или взгляните на Может ли jQuery читать / записывать куки в браузер? , на который есть хорошие ответы.

Лично я думаю, что прогрессивное улучшение - это путь. Поддержка автоматического отображения функции slideToggle () <div> s с помощью local storage для сохранения / чтения данных в / из. Не нужно беспокоиться о cookie-файлах, поскольку у вас простое постоянство на стороне клиента. Главный недостаток, конечно, в том, что это относительно новый продукт, и не все браузеры поддерживают его . Если прогрессивное улучшение (которое, среди прочего, означает предоставление пользователям современных браузеров улучшенной версии страницы) не соответствует вашим требованиям, и вам придется реализовать эту функцию и для старых браузеров, вы можете посмотреть store.js и хорошая статья о том, почему это хорошо.

1 голос
/ 06 апреля 2011

Я полагаю, что Maxx и Airbai правы в отношении файлов cookie.

Вот несколько ссылок:

Плагин COOQUERY

W3Schools объяснение о js cookie

Может быть, это поможет вам =)

1 голос
/ 06 апреля 2011

Вы можете сохранить состояние в cookie и получить его в window.onload.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...