Las casillas de verificación generalmente representan datos binarios que se almacenan en la base de datos como valores Sí / No, S / N o 1/0. ¡Las casillas de verificación HTML tienen mala naturaleza para enviar valor al servidor solo si la casilla está marcada! Eso significa que el script del servidor en otro sitio debe saber de antemano cuáles son todas las casillas de verificación posibles en la página web para poder almacenar valores positivos (marcados) o negativos (no marcados). En realidad, solo los valores negativos son un problema (cuando el usuario desmarca el valor previamente verificado), ¿cómo puede saber esto el servidor cuando no se envía nada si no sabe de antemano que se debe enviar este nombre? Si tiene un script del lado del servidor que crea dinámicamente un script de ACTUALIZACIÓN, hay un problema porque no sabe qué todas las casillas de verificación se deben recibir para establecer el valor Y para los marcados y el valor N para los no verificados (no recibidos).
Como almaceno los valores 'Y' y 'N' en mi base de datos y los represento a través de casillas de verificación marcadas y no marcadas en la página, agregué un campo oculto para cada valor (casilla de verificación) con los valores 'Y' y 'N' y luego uso casillas de verificación solo para uso visual representación, y use la función simple JavaScript check () para establecer el valor de if según la selección.
<input type="hidden" id="N1" name="N1" value="Y" />
<input type="checkbox"<?php if($N1==='Y') echo ' checked="checked"'; ?> onclick="check(this);" />
<label for="N1">Checkbox #1</label>
utilizar un oyente de JavaScript onclick y verificar la función de llamada () para cada casilla de verificación en mi página web
function check(me)
{
if(me.checked)
{
me.previousSibling.previousSibling.value='Y';
}
else
{
me.previousSibling.previousSibling.value='N';
}
}
De esta manera, los valores 'Y' o 'N' siempre se envían al script del lado del servidor, sabe cuáles son los campos que deben actualizarse y no hay necesidad de convertir el valor "on" de checbox en 'Y' o la casilla de verificación no recibida en 'N '.
NOTA: el espacio en blanco o la nueva línea también es un hermano, así que aquí necesito .previousSibling.previousSibling.value. Si no hay espacio entre ellos, entonces solo .previousSibling.value
No necesita agregar explícitamente el escucha de clics como antes, puede usar la biblioteca jQuery para agregar dinámicamente el escucha de clics con la función de cambiar el valor de todas las casillas de verificación en su página:
$('input[type=checkbox]').click(function()
{
if(this.checked)
{
$(this).prev().val('Y');
}
else
{
$(this).prev().val('N');
}
});