Плагин jQuery Tablesorter - как сохранить состояние при выходе со страницы - PullRequest
3 голосов
/ 17 февраля 2012

Я использую плагин jQuery Tablesorter, он отлично работает. Однако есть проблема. Представьте, что у вас есть какой-то порядок сортировки, но вы хотите прожить страницу и вернуться в ближайшее время. К сожалению, когда вы вернетесь, вы получите первоначальный порядок сортировки, который просто неверен. Поэтому я пытался найти подсказку, как сохранить состояние Tablesorter (помните выбор сортировки при выходе из страницы) в некоторой переменной и передать его через URL с помощью _GET в php. Будем благодарны за любые идеи и помощь.

Я провел небольшое исследование и выяснил следующее:
1. Вы можете прочитать текущую сортировку

     <script>
    $(window).unload( function () {   
    var sortList;  
    $(table).tablesorter().bind("sortEnd", function(sorter)   
    {      
        sortList = sorter.target.config.sortList;  
        $_GET['sortList'] = sortList;  
    });   
    }  
    );
    </script>

2.Я попытался сохранить сортировочный список, как указано выше, и прочитать его при загрузке страницы:

<script>  
$(document).ready(function()   
    {   
        sortList=$_GET['sortList'];  
        $.tablesorter.defaults.widgets = ['zebra'];   
        $.tablesorter.defaults.sortList = [[1,0]];   
        $("table").tablesorter();   
    }   
);      
</script>
  1. Не работает, я думаю, что эти 2 строки сомнительны:

    = $ список сортировки _ GET [ ''] список сортировки; ... $ _GET ['sortList'] = sortList;

Я смешиваю здесь языки JavaScript с PHP и типами данных. Но я не профессиональный программист и не могу соединить точки. Любая помощь?

Алекс

Ответы [ 3 ]

7 голосов
/ 20 февраля 2012

У меня есть вилка плагина tablesorter на github, и я написал виджет под названием "saveSort" ( demo ), который сохраняет последнюю сортировку в localStorage, если браузер имеет HTML5 или в печенье как запасной вариант.

1 голос
/ 17 февраля 2012

попробуйте эту библиотеку Адрес jQuery для работы в решении с использованием объекта window.location.hash. В настоящее время я использую его в проекте и отлично работает.

0 голосов
/ 17 февраля 2012

В зависимости от того, как вы закодировали страницу, некоторые браузеры автоматически запоминают, каким было последнее состояние. Хотя, скорее всего, этого не произойдет, особенно в старых браузерах.

Основное кросс-браузерное решение - хранить информацию о состоянии в объекте window.location.hash. Другими словами, для любого события или состояния, которое вы хотите запомнить, вы меняете хеш на уникальный идентификатор:

window.location.hash = 'column1'

Это добавляет #clicked-button в конец вашего URL. Вы хотите вызвать это, когда пользователь сортирует таблицу. Это само по себе ничего не сделает. Второй шаг - прослушать изменения в хэше. В IE есть событие onhashchange, но я не думаю, что другие браузеры поддерживают это событие. Альтернатива - установить интервал для прослушивания вручную.

var last_hash = '';
setInterval(function()
{
    if(window.location.hash != last_hash)
    {
        //a new event happened, change the state of the page
        last_hash = window.location.hash;

        if(last_hash == 'column1')
        {
            //sort based on column1
        }
        else if(last_hash == 'column2')
        {
            //sort based on column2
        }
        //etc
    }
}, 500);

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

Вы также можете прочитать их для получения дополнительной информации о других методах.

...