PUBLICAR casillas HTML no marcadas
Tengo un montón de casillas de verificación que están marcadas de forma predeterminada. Mis usuarios probablemente desmarcarán algunas (si las hay) de las casillas de verificación y dejarán marcadas el resto.
¿Hay alguna manera de hacer que el formulario PUBLICE las casillas de verificación que no están marcadas, en lugar de las que sí están marcadas?
La solución que más me ha gustado hasta ahora es poner una entrada oculta con el mismo nombre que la casilla de verificación que podría no estar marcada. Creo que funciona de modo que si la casilla de verificación no está marcada, la entrada oculta aún se realiza correctamente y se envía al servidor, pero si la casilla de verificación está marcada, anulará la entrada oculta anterior. De esta manera, no es necesario realizar un seguimiento de qué valores de los datos publicados se esperaba que procedieran de las casillas de verificación.
<form>
<input type='hidden' value='0' name='selfdestruct'>
<input type='checkbox' value='1' name='selfdestruct'>
</form>
Agregue una entrada oculta para la casilla de verificación con una ID diferente:
<input id='testName' type='checkbox' value='Yes' name='testName'>
<input id='testNameHidden' type='hidden' value='No' name='testName'>
Antes de enviar el formulario, deshabilite la entrada oculta según la condición marcada:
form.addEventListener('submit', () => {
if(document.getElementById("testName").checked) {
document.getElementById('testNameHidden').disabled = true;
}
}
Lo resolví usando JavaScript básico:
<input type="hidden" name="checkboxName" value="0"><input type="checkbox" onclick="this.previousSibling.value=1-this.previousSibling.value">
¡Tenga cuidado de no tener espacios ni saltos de línea entre estos dos elementos de entrada!
Puede utilizar this.previousSibling.previousSibling
para obtener elementos "superiores".
Con PHP puedes verificar el campo oculto nombrado para 0 (no establecido) o 1 (establecido).
Mi favorito personal es agregar un campo oculto con el mismo nombre que se usará si la casilla de verificación no está marcada. Pero la solución no es tan fácil como parece.
Si agrega este código:
<form>
<input type='hidden' value='0' name='selfdestruct'>
<input type='checkbox' value='1' name='selfdestruct'>
</form>
Al navegador realmente no le importará lo que hagas aquí. El navegador enviará ambos parámetros al servidor y el servidor tiene que decidir qué hacer con ellos.
PHP, por ejemplo, toma el último valor como el que se debe usar (consulte: Posición autorizada de claves de consulta HTTP GET duplicadas )
Pero otros sistemas con los que trabajé (basados en Java) lo hacen al revés: solo ofrecen el primer valor. .NET en su lugar le dará una matriz con ambos elementos
Intentaré probar esto con node.js, Python y Perl en algún momento.