Este artículo explica cómo construir formularios con mejora progresiva apoyándose en htmx, de forma que funcionen sin JavaScript y ganen interactividad cuando JS está disponible. El autor parte de un formulario real de la aplicación ties.pub para editar marcadores y conectarlos a listas, y desgrana los retos del estado transitorio: los datos que introduce el usuario y que aún no se han guardado en el servidor.
Se describen tres técnicas nativas de HTML para gestionar ese estado. La más habitual es enviar los valores en el propio formulario, de modo que el servidor los devuelva en su respuesta si hay errores de validación. Cuando se necesita que los datos sobrevivan a recargas y sean compartibles, se recurre a rutas y parámetros de consulta, algo especialmente útil para campos de búsqueda. Por último, el atributo formaction de los botones submit permite cambiar la ruta o la consulta solo cuando se pulsa un botón concreto.
Otro punto clave es detectar qué botón se ha pulsado al enviar un formulario, lo que llevó al autor a dividir el formulario de edición en dos, para que la tecla Enter no renombre el marcador cuando el usuario está buscando listas. En cuanto a la mejora progresiva, la recomendación es escribir primero toda la funcionalidad sin htmx —asegurando que no hay dependencias de JS— y luego añadir htmx con moderación para cosas como búsqueda activa o indicadores de carga.
El texto también aborda la elección de hx-target: cambiar solo una parte de la página suele generar inconsistencias con datos obsoletos, por lo que el autor suele sustituir la página completa. Cierra con una selección de lecturas recomendadas sobre HTML del lado del servidor, htmx con Go o Django, y diseño web resiliente.
