Вспоминая чекбоксы на разных страницах - как лучше? - PullRequest
3 голосов
/ 14 декабря 2008

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

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

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

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

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

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

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

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

1 Ответ

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

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

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