PUBLICAR casillas HTML no marcadas

Resuelto reach4thelasers asked hace 15 años • 45 respuestas

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?

reach4thelasers avatar Nov 27 '09 22:11 reach4thelasers
Aceptado

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>
Sam avatar Jan 02 '2010 20:01 Sam

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;
    }
}
vishnu avatar Jul 05 '2013 15:07 vishnu

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.previousSiblingpara obtener elementos "superiores".

Con PHP puedes verificar el campo oculto nombrado para 0 (no establecido) o 1 (establecido).

Marcel Ennix avatar Sep 10 '2014 12:09 Marcel Ennix

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.

SimonSimCity avatar Jan 23 '2012 13:01 SimonSimCity