Запоминание отмеченных флажков на разных страницах - как лучше?

Мне нужно добавить функциональность, аналогичную Gmail, где флажки в списке элементов запоминаются на нескольких страницах результатов и при уходе и возвращении к результату. То, что я пытаюсь выяснить, является лучшим способом сделать это. Я использую PHP и, вероятно, JQuery.

Моя первая мысль - добавить onClick для каждого флажка, который запускает обратный вызов AJAX серверу, который сохраняет идентификатор в массиве в сеансе. Каждый раз, когда загружается список элементов, система проверяет, отмечена ли строка, и, если необходимо, устанавливает флажок. Для надежности этот флажок будет снят после проверки, если запрос к серверу не может быть выполнен (проблема с подключением, ошибка сервера и т. Д.), И запрос будет выполнен как можно быстрее.

Звучит все хорошо, за исключением нескольких пунктов:

  • проверить все: что происходит? Отправляет ли он 30 (элементов страницы по умолчанию) на сервер? Или я должен удалить все onClicks, установить флажки, отправить запрос на сервер со всеми идентификаторами, а затем повторно добавить onClicks? Или...? Подобная проблема с снятием галочки со всех.
  • скорость: могут возникнуть проблемы, если сотни пользователей все время проверяют и снимают галку
  • Скорость браузера: я думаю, что лучше всего добавить onClick с JS после загрузки страницы, что, я думаю, может занять секунду или 2, если на одной странице 500 или более элементов. Стало бы большей проблемой с проверкой всего.

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

Есть ли другие решения или лучшие методы?

Редактировать: Как упоминал Эран Гальперин , метод check all должен был бы только проверить каждый из флажков, а затем сделать ajax-вызов со всеми строками. Не нужно удалять onClick.

Кроме того, похоже, что метод делегирования событий является хорошей идеей - он намного упростит задачу.

13.12.2008 21:21:25
1 ОТВЕТ
  1. Событие onclick не сработает, когда вы программно измените проверенный статус флажка. Вы можете отправить другой запрос AJAX, когда пользователь щелкает ссылку «проверить все / снять галочку», не беспокоясь о событиях щелчка, которые вы прикрепили к отдельным флажкам.
  2. Это компромисс при использовании запроса за клик. Или используйте кнопку «Сохранить», которая сохраняет всю форму.
  3. Использовать делегирование события - прикрепите одно событие onclick ко всему контейнеру, в котором хранятся все флажки, и проверьте цель события, чтобы увидеть, был ли установлен флажок. Кроме того, лично я бы не показывал 500 разных вариантов на одной странице. Если абсолютно необходимо иметь так много опций, разбейте их на несколько зон / страниц.

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

3
13.12.2008 21:37:19
Да, мне не нравится 500 за страницу. По умолчанию установлено значение 30, но люди часто хотят видеть больше, чтобы они могли сравнивать визуально. Также перед этой функциональностью им нужно будет проверить очень большие количества, чтобы выполнить действия со всеми из них.
Darryl Hein 14.12.2008 07:00:21