Lembrando as caixas de seleção marcadas nas páginas - qual é a melhor maneira?

Estou precisando adicionar funcionalidades semelhantes ao Gmail, onde as caixas de seleção em uma lista de itens são lembradas em várias páginas de resultados e quando você vai embora e volta ao resultado. O que estou tentando descobrir é a melhor maneira de fazer isso. Estou usando PHP e provavelmente jQuery.

Meu primeiro pensamento é adicionar um onClick a cada caixa de seleção que aciona uma chamada AJAX de volta ao servidor que armazena o ID em uma matriz na sessão. Cada vez que uma lista de itens é carregada, o sistema verifica se a linha está marcada e marque a caixa de seleção, se necessário. Para garantir a confiabilidade, a caixa de seleção seria desmarcada após a verificação se a solicitação ao servidor não pode ser concluída (problema de conexão, erro no servidor etc.) e a solicitação seria feita o mais rápido possível.

Isso soa bem, exceto por alguns itens:

verificar tudo: o que acontece? Ele envia 30 solicitações (itens de página padrão) para o servidor? Ou removo todos os onClicks, marque as caixas de seleção, envie uma solicitação ao servidor com todos os IDs e, em seguida, adicione novamente os onClicks? Ou...? Problema semelhante ao desmarcar tudo.velocidade: pode haver problemas se centenas de usuários estiverem verificando e desmarcando o tempo todovelocidade do navegador: eu acho que é melhor adicionar o onClick com JS após o carregamento da página, o que eu acho que pode levar um segundo ou 2 se houver 500 ou mais itens em uma página. Se tornaria um problema maior com o check all.

No passado, não encontrei uma maneira confiável de detectar quando o usuário sai de uma página. Se houver uma maneira confiável, pude ver essa opção como uma opção, para que apenas registre o descarregamento de cada página.

Existem outras soluções ou métodos melhores?

Editar: Como mencionado porEran Galperin, o método check all precisaria apenas marcar cada uma das caixas de seleção e, em seguida, fazer uma chamada ajax com todas as linhas. Não é necessário remover o onClick.

Além disso, parece que o método de delegação de eventos é uma boa idéia - facilitaria muito as coisas.

questionAnswers(1)

yourAnswerToTheQuestion