php - ejemplo - Recordando las casillas marcadas en las páginas: ¿cuál es la mejor manera?
javascript checkbox value (1)
Necesito agregar funcionalidades similares a Gmail, donde las casillas de verificación en una lista de elementos se recuerdan en varias páginas de resultados y cuando se va y vuelve al resultado. Lo que intento descubrir es la mejor forma de hacerlo. Estoy usando PHP y probablemente jQuery.
Mi primer pensamiento es agregar un onClick a cada casilla de verificación que activa una llamada AJAX al servidor que almacena el ID en una matriz en la sesión. Cada vez que se carga una lista de elementos, el sistema verificará si la fila está marcada y marcará la casilla si es necesario. Para mayor confiabilidad, la casilla de verificación se desmarcaría luego de verificar si la solicitud al servidor no se puede completar (problema de conexión, error del servidor, etc.) y la solicitud se realizará tan rápido como sea posible.
Esto suena muy bien, excepto por algunos elementos:
- revisa todo: ¿qué sucede? ¿Envía 30 solicitudes (elementos de página predeterminados) al servidor? ¿O elimino todos los onClicks, marque las casillas de verificación, envíe una solicitud al servidor con todos los ID y luego vuelva a agregar onClicks? O...? Problema similar con desmarcar todo.
- velocidad: podría comenzar a haber problemas si cientos de usuarios están revisando y deseleccionando todo el tiempo
- velocidad del navegador: creo que es mejor agregar el onClick con JS después de cargar la página, lo que creo que podría tomar un segundo o 2 si hay 500 o más elementos en una página. Se convertiría en un problema mayor con comprobar todo.
En el pasado, no he encontrado una manera confiable de detectar cuándo el usuario deja una página. Si hay una manera confiable, entonces podría ver que esta es una opción, así que solo registra en cada descarga de página.
¿Hay otras soluciones o mejores métodos?
Editar: Como lo mencionó Eran Galperin , el método de verificar todo solo necesitaría marcar cada una de las casillas de verificación y luego hacer una llamada ajax con todas las filas. No es necesario eliminar el onClick.
Además, parece que el método Delegación de evento es una buena idea, facilitaría las cosas.
- Un evento onclick no se activará cuando programáticamente cambie el estado marcado de una casilla de verificación. Puede enviar una solicitud AJAX diferente cuando un usuario hace clic en el enlace para verificar / desmarcar todo, sin preocuparse por los eventos de clic que adjuntó a casillas de verificación individuales.
- Esta es la compensación cuando se utiliza una solicitud por clic. Alternativamente, utilice un botón "Guardar" que guarda todo el formulario.
- Usar la delegación de eventos : adjunte un evento onclick al contenedor completo que contiene todas las casillas de verificación y verifique el destino del evento para ver si se hizo clic en una casilla de verificación. Además, personalmente, evitaría mostrar 500 opciones diferentes en la misma página. Si es absolutamente necesario tener tantas opciones, divídalas en varias zonas / páginas.
Para un usuario que abandona la página, puede usar el evento onbeforeonload ; sin embargo, si el navegador se bloquea o sale de manera desagradable, no se detectará. Úselo según lo crítico que sea para poder capturar los cambios del usuario.